[Unity] 최적화

0시0분·2024년 2월 21일
0

Unity

목록 보기
16/19

최적화 과정에서 사용했던 방법들을 정리하는 글이다.

1. 프로파일러

Window > Analysis > Profiler

메모리 누수가 발생했을때 원인이 되는 리소스를 파악하기 좋았다.
더 디테일하고 다양하게 사용하는 방법이 많은 것 같은데 아직 그렇게는 써보지 못했다.

2. 불필요한 로드된 에셋 제거

텍스처나 머테리얼은 해당 리소스를 사용한 오브젝트가 파괴되어도 메모리에 남아있다.
따라서 주기적으로 정리할 필요가 있었다.

Resources.UnloadUnusedAssets();

👀 https://blog.goldface.kr/98

3. 주기적으로 GC 소환

주변에 존재하는 캐릭터 수가 일정 기준을 넘어서거나,
일정 시간이 되면 주기적으로 GC를 수집하도록 했다.

GC.Collect();

4. 코루틴 yield 캐싱

WaitForSeconds 대기 코루틴을 사용할때 캐싱해서 사용했다.

  • 개별 캐싱
public static WaitForSeconds endSeconds = new WaitForSeconds(0.15f);
  • 딕셔너리 캐싱
private static Dictionary<float, WaitForSeconds> delayDictionary = new Dictionary<float, WaitForSeconds>();
public static WaitForSeconds GetWaitForSeconds(float seconds)
{
    delayDictionary.TryAdd(seconds, new WaitForSeconds(seconds));

    return delayDictionary[seconds];
}

5. Destroy 후 null

Destroy(obj);
obj = null; 

참조를 제거해 GC 수집 대상에 들어갈수 있도록 처리.

6. 사용하지 않는 기본 함수 제거

사용하지 않는 Update(), Start() 등 제거.
함수 내부가 비어있더라도 남아있는한 매 프레임마다 호출하므로 지워야 한다.



참고할만한 유니티 공식문서
👀 https://www.unitysquare.co.kr/growwith/resource/form?id=154
👀 https://www.unitysquare.co.kr/growwith/unityblog/webinarView?id=348

0개의 댓글