게임 설정의 최적화 및 옵션 관련 부분을 개발하다보면,흔히 말하는 풀옵, 상옵, 하옵 등 성능 관련을 작업하는 날이 올 것이다.오늘은 렌더링의 주기를 관리하는 "온디맨드 렌더링" 에 대해 알아보자. 렌더링 주기를 관리하는 방법이라면Application.targetFrameRate 혹은QualitySettings.vSyncCount 해당 프로퍼티를 수정해서 렌더링 주기를 관리할 수 있었다. 하지만 이러한 접근 방식은 렌더링 뿐만 아니라 Unity가 실행하는 모든 함수 주기에도 영향을 주기 때문에OnDemandRendering 을 통해 플레이어 루프 주기와 렌더링 주기를 분리할 수 있다. 쉽게 말해 매 주기마다 체크하는 터치이벤트는 그대로 60프레임을 기준으로 체크를 하면서렌더링은 이보다 낮은 프레임으로 표..
유니티에서는 특정한 순서대로 실행되는 함수들이 있다. 이러한 함수를 통해서 게임 오브젝트의 초기화, 업데이트, 렌더링 등의 작업이 이루어지는데 이를 통틀어 함수 생명 주기 라고 한다 이벤트 함수의 실행 순서 - Unity 매뉴얼 Unity 스크립트를 실행하면 사전에 지정한 순서대로 여러 개의 이벤트 함수가 실행됩니다. 이 페이지에서는 이러한 이벤트 함수를 소개하고 실행 시퀀스에 어떻게 포함되는지 설명합니다. docs.unity3d.com 유니티 엔진의 기초적인 부분이지만 그 중 Update, FixedUpdate, LateUpdate에 대해 설명을 해보려고 한다. 그림상으로 보았을 때 FixedUpdate -> Update -> LateUpdate 순으로 동작하는 것 같지만 Physics 부분에서 가장 ..
유니티 터널링 (Tunnelling) 현상이란 충돌 처리가 필요한 게임 오브젝트가 다른 충돌체를 뚫고 지나가는 현상을 말한다. 터널링이 발생하는 이유는 프레임 드랍 현상이나 물체가 너무 빨리 움직이는 이유 등으로 충돌 처리가 제대로 이루어지지 않으면 발생할 수 있다 프레임 드랍과 이벤트 함수 호출 주기 유니티의 Update의 호출 간격은 일정하지 않기때문에 void Update() { transform.position += (Direction) * moveSpeed * Time.deltaTime; } 위처럼 Update 함수에서 물체를 움직이게 되면 Time.deltaTime의 시간이 프레임에 따라 변동됨으로 의도한 일정한 moveSpeed 만큼의 이동이 이루어지지 않을 수 있다. 따라서 일정한 비율만큼..
유니티 개발을 하다보면 다른 스크립트의 함수 호출을 필요로 할 때가 있다. 유니티 Doc를 확인하면 SendMessage를 통해서 다른 함수를 호출 할 수 있다. 라고 말해주지만 Unity - Scripting API: GameObject.SendMessage Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close docs.unity3d.com 일단 결론을 말하자면 SendMess..
Unity Sprite Atlas 스프라이트 아틀라스 - Unity 매뉴얼 2D 프로젝트는 스프라이트와 다른 그래픽스를 사용하여 씬의 시각적 요소를 만듭니다. 따라서 단일 프로젝트에 다수의 텍스처 파일이 들어 있을 수 있습니다. 일반적으로 Unity는 씬의 각 텍스처 docs.unity3d.com 스프라이트 아틀라스는 여러개의 텍스쳐를 단일 텍스쳐로 결합하는 에셋이다. 왜 여러개의 텍스쳐를 그대로 쓰지않고 단일 텍스쳐로 만들어서 사용하는 기능을 만들었을까? 그건 바로 Drawcall과 관련이 있다. Material을 로드하게되면 Material 1개당 1개의 batches가 발생한다. batches 란 오브젝트를 그릴 횟수 + Set Pass Calls의 카운트로 계산된다 Set Pass calls는 s..
가비지 컬렉터란? 메모리 관리 기법 중의 하나로, 동적으로 할당한 메모리 영역 중 더 이상 쓰이지 않는 영역을 찾아내어 해제하는 기능. (이하 GC) C 혹은 C++ 에서 할당과 해제를 직접하는 언어들도 있지만 항상 사람은 실수를 하기 마련이기에, 해제를 하지않거나 혹은 해제된 메모리를 사용하면서 문제가 발생하기에 프로그래밍 언어가 직접 메모리 해제를 관리하는 기능이다. 유니티는 C#의 GC와 기본적으로 비슷하지만 몇가지 차이가 있다. 유니티 GC Doc 가비지 컬렉터 개요 - Unity 매뉴얼 Unity에서는 가비지 컬렉터를 사용하여 애플리케이션과 Unity에서 더 이상 사용하지 않는 오브젝트로부터 메모리를 회수합니다. 스크립트가 관리되는 힙에 할당하려고 하지만 할당을 수용할 수 docs.unity3d..
IL2CPP 단어 뜻만 보자면 IL to CPP 유니티에서 사용하는 중간 언어(Intermediate Language) 를 C++ 코드로 변환한다는 뜻 IL2CPP는 .NET 환경을 지원하지 않는 플랫폼에서 게임을 실행할 수 있도록 지원한다. 진행 방식은 아래 처럼 코드를 작성했다고하면 public int Add(int a, int b) { return a + b; } 아래 처럼 중간언어(IL)로 변경 후 C++언어로 다시 변경하는 방식이라고 한다 .method public hidebysig instance int32 Add(int32 a, int32 b) cil managed { // Code size 7 (0x7) .maxstack 2 .locals init (int32 V_0) IL_0000: no..
2021년 7월 최신화를 기준으로 작성했습니다. 유니티 공식에서 언급한 UI 관련 최적화 팁입니다. 1. Canvas 내의 UI가 많아지면 분할하자 요소가 변경될 때마다 Canvas를 최적으로 렌더링 하기 위해서 다시 한번 계산에 들어간다 따라서 요소가 많아지면 Canvas를 분할하여 관리하라 2. Raycast Target 를 사용하지 않아도 된다면 비활성화 시키자 Graphic Raycaster가 상호작용이 가능하며 Raycast Target이 활성화 되어있는 UI들을 매프레임마다 이벤트가 발생하는지 매번 검사한다 따라서 사용하지 않아도 된다면 해당 옵션은 꺼두자 *상호작용이 가능한지는 Graphic Raycaster가 판단하기 때문에 Graphic Raycaster 또한 필요하지 않다면 삭제하는게 ..