새소식

💻 Programming (프로그래밍)/Unity | C#

[Unity] 프로파일링 + 최적화 습관

  • -

프로파일링

 

앱의 성능을 측정하기 위해 유니티 측에서 프로파일링 툴을 만들어 두었는데 이는

Window > Analysis > Profiler

여기서 사용을 하면 되지만

 

이때 그 전에 프로파일링 하기 전에 중요한 점으로

고객 타겟층의 최적화된 성능을 프로파일링 해라

프로토타입 개발 단계에서는 성능보단 재미, 방향성, 목적에 집중하고
실제 개발 단계에서 성능, 최적화, 타겟을 생각하는 것

 

핵심점은 사실 고객 타겟층을 파악을 하고, 그 기기에 따른 성능에 맞춰주면 되는 것이지 높은 퍼포먼스를 처음부터 넣어서 스마트폰의 발열도 못잡고, 많은 사용자들이 이용할 수 없는 앱이면 쓸모가 없어진다는 이야기 였습니다.

 

프로파일링에 대한 자세한 방법은 유니티 매뉴얼 페이지의

https://docs.unity3d.com/kr/2021.3/Manual/Profiler.html

 

프로파일러 개요 - Unity 매뉴얼

Unity 프로파일러는 애플리케이션의 성능 정보를 알려주는 툴입니다. 네트워크에 있는 기기, 또는 컴퓨터에 연결된 기기에 연결하여 목표 릴리스 플랫폼에서 애플리케이션이 어떻게 동작하는지

docs.unity3d.com

를 더 참고하시면 될 것 같습니다.



코드 최적화

유니티 오버헤드를 줄이기 위한 방법 5가지

 

1) 쓸데없는 Monobehavior을 상속받는 함수는 없애자
ex) start, fixedupdate, update 등등
연관이 어떤식으로 되어있냐면

User C# <--> Unity Engine, c++

유저는 스크립트로 C#에서 제어를 하지만 실제로 동작하는 일은 Engine인 C++ 에서 동작을 하기에 최대한 그들의 움직임을 줄여주는 것이 훨씬 향상이 된다는 이야기 였습니다. 이때, Monobehavior을 상속받은 함수들(ex. awake start, update, fixedupdate 등)은 Unity Engine에서 Queue 작업으로 따로따로 관리를 하기 때문에 이들이 많아지면 많아질수록 자원을 사용하게 됩니다.

 

또한 C#이 C++ 엔진의 컨퍼런스 같은 느낌이여서 object를 가져올때나, translate 할때 등등 유니티 엔진에서 소모되는 자원이 크니, update문에서 실행보단, start에서 한 번만 가져와야 합니다.

2) 하나의 제어 스크립트를 만들자

각 오브젝트마다 스크립트를 두어서 생성할바엔 차라리 하나 움직임을 제어하는 스크립트를 두어서 그 안에서 해결하는게 오버헤드를 줄여줍니다.

3) 또한 비싼 FInd(), GetComponent와 같은 호출을 빈번히 사용하지 않도록 한다
ex) update문에 넣는다던지 필요할때만 start 에 넣고 사용하는게 좋습니다.

4) Debug.Log도 생으로 쓰는것도 자원소모
Conditional을 주어서 하는게 낫습니다.

5) 정적데이터 XML/JSON 과 같은 데이터도 스크립터블 오브젝트로 변환한 후 사용

즉 런타임에 실행하지 않도록 미리 스트립터블 오브젝트로 변환하는 것이 성능상 낫습니다.




Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.