본문 바로가기

Unity3D13

Unity DOTS 기술 정리: 2. Burst Compiler 2. Burst CompilerBurst 컴파일러는 유니티의 성능을 끌어올리기 위한 컴파일러 도구이다. C# 코드와 호환되는 최적화된 네이티브 CPU 코드를 작성할 때 필요하다.Burst는 Unity에서 고성능 연산 처리를 위해 도입된 컴파일러로, Unity에서 사용 가능한 C# 코드 컴파일러이다. Burst는 LLVM을 통해 .NET IL( Intermediate Language, 중간 언어)를 대상 CPU 아키텍처에 최적화된 코드로 변환한다.Unity의 Job System을 위해 디자인되었다. 사용 방법은 단순히 클래스에 어트리뷰트로 [BurstCompiler]를 붙이면 된다. 다만 주의사항이 있다면, Burst Compiler를 사용하면 런타임 오류가 발생했을 때 상세 정보를 확인하기 어렵다는 문제.. 2025. 9. 6.
Unity DOTS 기술 정리: 1. Job System 이번에 프로젝트에서 최적화가 필요해 Unity에서 C# Job System과 Burst Compiler를 사용하게 된 일이 있었습니다. 그 내용에 대해 제가 공부한 바를 정리해 놓은 글을 작성하려 합니다. 오류가 있다면 자유롭게 지적 부탁드립니다!1. Job SystemJob이란?유니티에서 멀티스레드 프로그램을 손쉽게 작성할 수 있는 방법.일반적인 멀티스레드와 차이점이 있다면, 유니티 자체 시스템을 활용하기 때문에 별도로 스레드를 생성하지 않고 유니티에서 지원하는 워커 스레드를 가져와 사용한다.다만 워커 스레드는 중간에 중단할 수 없기 때문에, System.Thread.Sleep에 대응되는 기능이 없다는 단점이 있다.IJob, IJobParallel을 상속받는 잡을 만들어서, 이를 이용해서 유니티 내에서.. 2025. 9. 6.
Unity Photon Engine: '빌드 없이' 단일 PC에서 여러 클라이언트 테스트하기(Windows) 이번에 프로젝트를 진행하게 되면서 멀티플레이어 게임을 개발하게 되었다.이때 멀티플레이어 게임을 개발하면서 단일 PC에서 빌드 없이 여러 클라이언트를 바로 테스트해 볼 방법이 있을까?이번 글에서는 Symbolic Link를 직접 사용하거나, 간접적으로 이를 사용하는 Extension을 통해 이를 해결할 방법을 살펴보도록 하겠다(Windows를 대상으로 작성하였으나, 다른 운영체제에서도 성립할 가능성이 높음). 이론멀티플레이어 게임 개발은 여러 명의 클라이언트를 동시에 접속시킨 상태에서 게임을 테스트해야 하는 경우가 자주 발생한다.이때 단일 PC에서 여러 클라이언트를 테스트해야 하는 경우 문제가 생긴다. 보통은 빌드 파일을 만들어서 여러 클라이언트를 동시 접속시키도록 하여 테스트하는데, 매번 빌드해서 테스트.. 2025. 7. 13.
Unity - Terrain이 빛나는 문제(URP 모바일, Unity Engine 2022버전 이하)Unity - Terrain이 빛나는 문제(URP 모바일, Unity Engine 2022버전 이하) 유니티 엔진을 통해 3D 게임을 제작하던 와중에, Terrain으로 제작한 맵이 이상하게 빛이 나는 상황을 겪었다. 마치 금속 재질처럼 Specular reflection이 강하게 나타나는 상황이다.해당 문제는 유니티 커뮤니티에서 제기된 것으로, 유니티 측에서는 실제 엔진의 버그가 맞다고 답변하였다.Unity 2023 버전에서 해당 문제가 해결되었지만, 그 이하 버전인 2022, 2021 버전을 사용한다면 여전히 발생한다(2020은 있는지 알 수 없음).문제 상황일반적으로 Mesh를 배치하여 맵을 제작할 땐 각각에 Materials를 적용한다. 그래서 Specular 수치를 조절해서 빛의 반사가 어떻게 적용될지 조절한다.그런데 Terrain을 기반으로 맵을 적용했더니 위 사진처럼 Terrain이 금속 재.. 2024. 9. 3.
deltaTime은 언제 계산될까? deltaTime은 언제 계산될까? 우리가 유니티에서 맨날 사용하는 Time.deltaTime. 이동할 때는 필수고 실시간으로 움직일 땐 여기저기 안 들어가는 곳이 없다. 그런데 Time.deltaTime이 계산되는 기준은 무엇인가? 매 프레임 유니티는 어떤 작업을 수행하고 있으며, Time.deltaTime은 언제 계산하는 걸까? 이에 관해 유니티가 2020.1 버전까지 존재했던 프레임 파이프라인의 문제점과 2020.2 베타 버전에서 개선한 프레임 파이프라인의 순서를 단순화된 형태로 공개한 글이 있어 이를 써보고자 한다. 이 글에 따르면 Unity의 프레임 파이프라인은 현재와 같은 모습을 갖추기까지 많은 변화가 있었다고 한다. 거의 매 릴리즈마다 변화가 있었다고 하니 이전 버전에서는 어떻게 샘플링을 했.. 2023. 7. 15.
유니티 이벤트 시스템 최적화하기 - Graphic Raycaster 제거하기 이벤트 시스템이 렉을 유발하다 어느 순간부터 유니티에서 EventSystem.Update()가 엄청난 렉을 유발했다. 원인은 바로 그래픽 레이 캐스터(Graphic Raycaster)였다. 아무 생각 없이 캔버스를 생성해놨는데, 미처 그래픽 레이 캐스터를 지우지 못하고 방치했더니 프로파일러가 엄청난 스파이크를 발생시키고 있었다. 그래픽 레이 캐스터(Graphic Raycaster) 그래픽 레이 캐스터는 캔버스에 레이저(Ray)를 발사하여 UI에 마우스가 올려졌는지, 클릭하였는지 등을 검사하는 컴포넌트이다. 그래픽 레이 캐스터 - Unity 매뉴얼 (unity3d.com) 그래픽 레이캐스터 - Unity 매뉴얼 그래픽스 레이캐스터는 캔버스에 레이캐스트를 하는 데 사용합니다. 레이캐스터는 캔버스의 모든 그래.. 2021. 8. 10.
유니티 2D에서 Collider와 Rigidbody 최적화에 관하여 ***테스트 결과와 결론이 궁금하신 분들은 마지막 3줄 요약을 확인해주세요! 개요 불과 얼마 전까지, Rigidbody는 물리 연산을 사용하기 때문에 중력 같은 물리 처리가 필요 없다면 Rigidbody를 부착하지 않는 것이 더 효율적이라 생각했다. 그러나 최적화 팁을 보면 오히려 반대였다. ★ 10. Unity 최적화 기법 :: 큰 꿈을 그리는 프로그래머의 공간. (tistory.com) ★ 10. Unity 최적화 기법 Unity 3D :: 게임 최적화 기법 [최적화의 시작은 병목 파악부터] # CPU - 너무 많은 DP CALL - 복잡한 스크립트나 물리 연산 # Vertex Processing - 너무 많은 버텍스들 - 버텍스당 너무 많은 연산 (Verte.. loadofprogrammer.tis.. 2021. 8. 9.
ScriptableObject를 저장하는 법: EditorUtility.SetDirty(Object target) 유니티 에셋(ScriptableObject, Monobehaviour)을 저장하기 Unity - Scripting API: EditorUtility.SetDirty (unity3d.com) Unity - Scripting API: EditorUtility.SetDirty You can use SetDirty when you want to modify an object without creating an undo entry, but still ensure the change is registered and not lost. If the object is part of a Scene, the Scene is marked dirty. If the object may be part of a Prefab inst.. 2021. 3. 17.
유니티 Log Viewer 소개: 빌드하고 Debug.Log를 보고 싶을 때 공들여 만든 유니티를 실제로 플레이할 수 있는 파일로 만들려면 빌드(Build)를 해야 합니다. 그런데 빌드하는 시간이 많이 걸리기 때문에, 보통 유니티 에디터에서 모든 작업을 끝내고 빌드하게 됩니다. 그래서 버그를 모두 테스트하고 나서 빌드하는 방식으로 진행합니다. 그런데 빌드하고 나면 유니티 에디터에서는 발견할 수 없었던 버그가 하나씩 발견될 때가 있습니다. 정말 간단한 버그라면 쉽게 바로잡을 수 있겠지만, 유니티 에디터에서는 멀쩡하던 것이 오류를 내기 시작했다면 버그를 고치는 일이 정말 어렵게 됩니다. 가장 문제는 뭐가 문제인지 모른다는 것입니다. 유니티 에디터에서는 컴파일 오류, 런타임 오류 등 다양한 문제가 발생하면 편리하게 로그를 띄워줍니다. 개발자가 Debug.Log()를 통해 원하는 로그를.. 2021. 1. 11.