본문 바로가기

분류 전체보기

Unity: ShaderLab 패키지 요구사항 정의 (PackageRequirements) 2021.2 알파버전이 한창 개발되고있습니다. SRP 역시 버전을 바꿔가며 거듭 진화하고 있는데, API 이름이라 지원하는 키워드 등 버전별로 사용가능한 부분이 상이해 섣불리 기존 프로젝트에 적용하기엔 부담스럽습니다. 에셋 개발자들 역시 SRP 버전업에 따라 키워드를 바꿔주거나 추가해주어야하고 유지보수가 쉽지 않습니다. Shader "MyShader" { SubShader { Pass { PackageRequirements { "com.unity.render-pipelines.universal":"[10.0,10.5.3]" } ... } Pass { PackageRequirements { "com.unity.render-pipelines.universal":"[11.0,11.2.4]" "com.my.ot.. 더보기
Unity: Workflow. Text 추가 효과 적용 - Deformer uGUI와 TextMeshPro 모두에서 사용가능한 Text 컴포넌트 애니메이터를 만드려고 uGUI 코드와 TMPro 코드를 읽어보던 중 BaseMeshEffect 컴포넌트를 이용한 효과 주입이 가능함을 발견했습니다. uGUI 패키지에 포함되어있는 Outline, Shadow 컴포넌트인데요. BaseMeshEffect를 이용해 추가적인 효과를 더해주는 기능을 제공합니다. 이를 참고해서 Mesh 버텍스를 랜덤하게 이동시켜 글자가 꿈틀거리는 효과를 만들었습니다. 기능 구현을 확인했고, 다른 이펙트와 겹쳐 사용이 가능한지 확인도 했습니다. 단순히 생성된 메쉬의 버텍스 위치만 옮겨주는 거다보니 크게 문제는 없을거라 생각했습니다. 그림자(Shadow)와 외곽선(Outline)효과도 문제없이 함께 적용됩니다. 프로.. 더보기
Unity: Workflow. ListPool<T> 리스트 풀 유니티 uGUI 코드를 살펴보다가 ListPool을 사용하는 부분을 발견했습니다. 주로 Mesh가 업데이트 되어야 할 때마다 버텍스를 관리해줄 때 리스트가 사용됩니다. 매번 리스트를 만들고 사용하면 그 동작이 얼마나 자주 진행되는지에 따라 메모리 누수로 인한 CPU Spike가 발생할 수 있습니다. 이를 방지하기 위해 uGUI 코드에서 internal로 사용되던 자료구조입니다. 구현은 위와 같이 되어있으며 2021.1 버전부터 public 으로 사용할 수 있게 접근제한이 풀렸습니다. uGUI의 Text 컴포넌트에서 사용되는 VertexHelper 클래스는 이를 리스트풀을 이용해 구현했습니다. 조심해야 할 점은 Release를 제대로 시켜주지 않으면 되려 메모리에 악영향을 줄 수 있다는 것입니다. 명시적으.. 더보기
프로필 보호되어 있는 글입니다. 더보기
문제해결: 2. 파일 이름이 너무 깁니다 삭제 방법 파일을 지우려고 했는데, 안된다고 하네요. 제가 삭제하고 싶은 경로는 C:\Workspace\ML\DQN 이었습니다. 윈도우키 + R을 눌러 실행 대화상자를 열고, CMD를 실행합니다. 그리고 지울 파일이 있는 경로로 이동합니다. 저는 타겟이 C:\Workspace\ML\DQN 이어서 C:\Workspace\ML로 이동했습니다. 지울 대상의 한 단계 위 디렉터리로 이동하면 됩니다. cmd 창에서 입력합니다. > cd C:\Workspace\ML > mkdir abc robocopy abc DQN /s /mir rmdir abc rmdir DQN 이렇게 입력해주면 삭제됩니다. abc는 임의의 이름이며, 통일해서 사용해주기만 하면 됩니다. 다만 기존 경로에 abc라는 이름의 파일이 존재하면 안됩니다. 더보기
Unity: 코드 블록 성능 측정 방법 효율적인 로직을 구현하기 위해 어떤 코드가 더 성능상 유리한지 시간을 재어 보고 싶을 때가 있습니다. 유니티에서는 GameObject.Find나 GetComponent와 같이 매 프레임 반복적으로 호출하지 말 것을 권장하는 코드들이 있죠. 하지만 글이나 얘기로만 들었지 실제로 어느정도로 성능이 좋지 않은지 제대로 측정해보지는 않습니다. 게다가 비슷한 시도를 하더라도 제대로 측정하는 경우는 거의 없습니다. 최근 유니티 한국어 개발자 톡방에서 TryGetComponent와 GetComponent의 성능에 대한 얘기가 나왔는데, 아무도 잘못된 부분을 짚어주지 않아 겸사겸사 코드 블럭 성능 테스트를 위한 코드를 작성하는 부분에 대해 다뤄보겠습니다. 더보기 # 유니티 개발자 톡방 캡쳐 보기 유니티 엔진으로 개발을.. 더보기
Unity: 코드레벨에서 사용중인 렌더 파이프라인 특정하기 1 GraphicsSettings.currentRenderPipeline API를 이용하면 현재 사용중인 렌더링 파이프라인 에셋을 가져올 수 있습니다. 하지만 빌트인 렌더러를 사용하고 있는 경우, URP나 HDRP 패키지를 임포트 하지 않아 스크립트에서 직접적으로 접근할 수는 없습니다. using UnityEngine.Rendering.Universal; if (GraphicsSettings.currentRenderPipeline is UniversalRenderPipelineAsset) { } 이런 코드는 UnityEngine.Rendering.Universal 네임스페이스가 정의되지 않아 컴파일에러를 일으킬 가능성이 있습니다. 대신에 GetType()을 이용해 타입 이름을 가져와 확인하는 방식으로 대체하.. 더보기
Unity: 당신의 에디터가 느려지는 이유 스터디 발표 자료입니다. 시간이 꽤 지나 전체공개로 올려둡니다. 유니티 에디터가 스크립트를 컴파일하고 로드하는 과정, 플레이 모드에 진입하는 과정이 왜 점차 느려지는지에 대한 간략한 정리와 시도해볼 수 있는 해결책입니다. Assembly Definition Asset으로 Assembly를 쪼개어 컴파일 시간을 단축합니다. Enter PlayMode를 사용해 도메인 로딩 시간을 단축합니다. 종속성이 줄어드는 방식의 어셈블리간 코드 레퍼런스로 전체 프로젝트를 설계합니다. 에셋스토어의 플러그인들 중에는 적합하지 않은 것들이 많아 선택적으로 적용해야합니다. drive.google.com/file/d/1jaM7U5EnL2p7B0ItesQYCx1PKsI7vxHe/view?usp=sharing 당신의 에디터가 느려지.. 더보기