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의 크기를 적절하게 정하는 것이 중요
'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 |