728x90

 

1. 하이라키 단순화

-하이라키 구조에서 Root GameObject는 모든 하위 GameObject의 Transform 데이터를 배열로 보관

-Root의 Transform 변화가 발생하면 하위의 모든 계층에 대한 Transform 계산을 다시함

-구조가 변경될 때는 Root 오브젝트의 Transform 배열의 메모리가 재할당되어 모든 배열 값을 다시 설정

GC가 발생할 가능성 높음

 

2. 참조 변수 캐싱

-Find 계열의 함수들은 비용이 높은 편

-생성되어 있는 모든 오브젝트를 순회하며 조건 검사를 거침

-가능하면 직접 참조하거나 초기화 시점에 검색하여 검색 결과를 캐싱해서 사용

 

3. Debug.log()

-별도의 작업을 해주지 않으면 빌드시 모두 포함됨

-빌드된 바이너리에서 스트링으로 인한 GC발생을 유발

-Conditional Attribute나 #if / #endif 를 이용

-Debug.Log() 계열의 함수를 Wrapping 하는 별도의 스크립트 작성

 

4. Scriptable Object

-변하지 않는 데이터를 위한 클래스는 MonoBehaviour 보다 ScriptableObject를 상속하여 객체를 작성

-Json, XML 형태를 사용하더라도 런타임에 파일을 읽고 쓰지 않고 실행 시점에 Scriptable Object로 변경해서 사용하는 것도 좋음

 

5. Object Pooling

-게임 내에서 사용할 객체를 미리 충분한 개수만큼 생성해두고, 필요할 때 꺼내 쓰고, 사용이 끝나면 Object Pool에 반환하는 시스템

-매번 생성과 삭제를 하지 않고 재활용하는 개념이므로, GC의 동작 횟수를 줄이는 데 도움이 되고 메모리 단편화 예방에 도움

-Pool의 크기를 적절하게 정하는 것이 중요

728x90

'Unity' 카테고리의 다른 글

DOTween / Tweener  (0) 2023.08.11
CapsuleCollider.direction  (0) 2023.08.09
최적화 / Scriptable Object  (0) 2023.08.08
데이터 관리  (0) 2023.08.08
[Unity] PlayerPrefs  (0) 2023.08.08
Posted by 바르마스
,