유니티 썸네일형 리스트형 Unity: Workflow. 유니티 에디터 종료 확인 문구 유니티 에디터를 의도치 않게 꺼버릴 때가 있습니다. 다른 브라우저를 끄거나, 클릭 미스로 꺼버리는 경우가 있죠. 프로젝트가 작다면 금방 다시 키는게 큰 문제가 되지 않지만, 로딩 시간이 오래 걸리는 경우 의도치 않은 에디터 종료가 부담스러울 수 있습니다. 간단하게 에디터 콜백을 추가해 다이얼로그 박스를 한 번 더 띄우도록 구현해보겠습니다. using UnityEditor; public class EditorQuitHandler { [InitializeOnLoadMethod] private static void Register() { EditorApplication.wantsToQuit += OnWantsToQuit; } private static bool OnWantsToQuit() { return Ed.. 더보기 Unity: 작업중인 프로젝트를 URP로 전환하기 전 확인할 사항 이 게시글은 2021. 5월 경 작성되었습니다. 다소 상황이 달라졌을 수 있어, URP 디퍼드 렌더링 등 최신 업데이트 된 소식을 꼭 찾아서 확인하세요. 유니버설 렌더 파이프라인이 뭐길래? Universal Render Pipeline은 기존 LWRP에서 이름이 바뀐 템플릿입니다. High-Definition의 반대편에서 Light-Weight라는 타이틀 아래 개발이 시작되었지만 이런저런 과정을 거쳐 최종적으로 Universal 한 플랫폼에서 동작한다는 의미로 굳어졌습니다. Light 함보다는 Universal 함에 포커스를 맞추고 개발하겠다는 포부를 밝힌 것인데요, 일부 사용자는 이 렌더러가 결코 Light-Weight 하지 않았기에 이름을 바꿀 수밖에 없었던 게 아닌가 의문을 제기하기도 합니다. 사실.. 더보기 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를 제대로 시켜주지 않으면 되려 메모리에 악영향을 줄 수 있다는 것입니다. 명시적으.. 더보기 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 당신의 에디터가 느려지.. 더보기 이전 1 2 3 4 5 다음