[펌] 유니티 엔진 팁 - 로딩시간 최적화에 대해서

|
출처 :http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_Lecture&page=1&sn1=&divpage=1&sn=on&ss=on&sc=on&keyword=%C0%AF%B4%CF%C6%BC&select_arrange=last_comment&desc=desc&no=275

[유니티 엔진 팁 - 로딩시간 최적화에 대해서]


로딩시간 최적화
- 직감도 좋지만 프로파일러를 적극 활용하는것이 정답입니다.
에디터의 profiler탭을 보면 함수들의 수행시간이 표시되는데
시간을 많이 잡아먹는 부분을 집중적으로 수정하면 됩니다.

프로파일러를 확인하지 않았을때 모르고 지나갔던 부분들...
불필요한 물리 오브젝트 제거!
스프라이트 출력용도로만 사용하던 오브젝트에 BoxCollider가 붙어있었는데,
프로파일러를 확인해 보니 이 collider를 재설정 하는데 많은 시간이 소요되더군요.
이부분을 제거하고 나니 로딩속도가 눈에띠게 빨라졌습니다.

- Find류의 함수는 주의할 것.
특히 Update등 매프레임마다 호출되는 곳에서는 GameObject.Find같은 검색함수는
되도록 사용하지 않는것이 좋습니다. 초기화할때 미리 레퍼런스를 갖고 있는것을 권장하고요,
성능좋은 PC에서는 차이가 없어보이지만 모바일에서는 확연한 차이를 발생시킵니다.

- 릴리즈 전 Debug.Log 지우기.
릴리즈 할때는 Debug.Log등의 로그출력부분은 모두 제거하는것이 좋습니다.
로그 남기는것 자체가 프레임에 영향을 주기 때문이죠.
예)
//Debug.Log("[ERROR] " + msg);   // 이런 문자열 합성코드가 들어있으면 가비지 컬렉터의
영향을 받습니다.
그리고 Debug.Log는 콘솔이나 파일로 기록을 남기기 때문에 속도가 굉장히 느리죠.

유니티 로딩 시스템 이해
아이폰이나 안드로이드용 유니티 어플을 실행해보면 다음과 같은 순서로 진행됩니다.

1) 어플실행 -> 2) 유니티 로고 출력 -> 3) 게임화면

"2)번 유니티 로고 출력"시 씬에 올라와 있는 오브젝트들을 모두 로딩하게 됩니다.
이때에는 로고 이미지 한장만 랜더링 할 수 있는 상태이기 때문에
로딩 진행상황등을 표시 하기가 어렵습니다(스크립트로 제어가 불가능함).
따라서 이부분을 빨리 지나가게 한 뒤 "3)번 게임화면"에 들어왔을때
별도의 로딩화면을 만들어 동적으로 로딩하도록 하는 시스템을 갖추는것이 좋아 보이더군요.


Trackback 0 And Comment 0