Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

행복한 개구리

Ocean Cleaner 21.08.17. 개발일지 - 최적화 본문

Unity/Project : Ocean Cleaner

Ocean Cleaner 21.08.17. 개발일지 - 최적화

HappyFrog 2021. 8. 17. 22:45

현재 기기에서 앱을 실행할 때 발열이 RPG급으로 심하게 나는 이슈가 있다. 따라서 최적화를 진행해보도록 하겠다.

하지만 최적화는 처음이니 개념부터 공부해보자 :D

 

 

https://docs.unity3d.com/kr/2019.4/Manual/MobileOptimizationPracticalScriptingOptimizations.html

 

스크립트 최적화 - Unity 매뉴얼

이 섹션에서는 게임에서 사용하는 실제 스크립트와 메서드를 최적화하려 할 때 어떻게 착수하면 될지 설명합니다. 또한 최적화가 가능한 이유 및 특정 상황에서 이러한 최적화를 적용했을 때

docs.unity3d.com

일단 내가 이해하고 구현할 수 있는 내용으로 정리를 해보자면

  1. 변수에 메모리 할당되는것을 최대한 줄인다.
    • ex. 많은 양의 문자열을 다룰 때는 "" 대신 System.String.Empty를 사용하자
      • => "가나다라"를 System.String.Format("가나다라")에도 해당되는 내용인지는 모르겠다. 맞다고 추측중.
  2. 단기적으로 사용하는 클래스의 메서드는 구조체로 사용하는 것을 권장한다.
    • => Heap에 쌓이지 않으며 가비지컬렉션의 대상이 되지도 않는다.
      • ex. 따라서 Vector3는 구조체로 구현되어있다.
  3. 오브젝트 풀링(Object Pooling)을 한다
    • 미리 생성해두고 SetActive를 사용할 수 있는 오브젝트들은 Instantiate대신 SetActive를 사용한다.
      • => Instantiate를 사용하는 것은 가비지 컬렉터가 작동해야 할 일이 생긴다는 것이다. 따라서 GC를 쉬게함으로써 메모리를 절약해준다.
    • 다만 상당시간동안 지속되는 주문 효과를 포함한 게임, 많은 수의 오브젝트가 나타나지만 진행에 따라 서서히 사라지는 게임 등은 풀링을 사용하면 더 느려지는 역효과를 볼 수 있다.
  4. 효과는 파티클시스템을 사용하여 구현한다.
    • 효과를 구현함에 있어 효과의 객체들이 각각의 독립된 객체라면 당연하게도 할당되는 메모리가 급증할 것이다. 따라서 폭죽이 터지는 효과라던지, 동전들이 마구 튀어나오는 효과 등은 파티클시스템을 이용하자.
  5. 내부 루프에서 콜스택 오버헤드 최소화한다
    • 업데이트나 반복문에서 Mathf.Abs(x)와 같은 함수를 호출하는 것보다는 직접 식을 세워서 x = (x>0 ? x : -x);와 같은 식으로 사용하는게 좋다.
  6. 물리 성능을 최적화한다.
    • Time창의 Fixed Timestep을 조정하여 물리 업데이트(ex. FixedUpdate)에 드는 시간을 줄일 수 있다.
      • 타임스텝을 늘리면 물리 정확도가 떨어지는 대신 CPU 오버헤드가 줄어든다
      • 출처 : Wiki백과
      • 정확도를 어느정도 포기하고 속도향상을 시켜줄 수 있는 상황이라면 시도해보자.
  7. 메시콜라이더(Mesh Collider) 사용을 지양한다.
    • 메시콜라이더는는 기본 콜라이더들에 비해 퍼포먼스 오버헤드가 훨씬 크다.
      • 기본 콜라이더를 가진 자식오브젝트들을 사용하여 대략적으로 메시콜라이더 비슷하게 만들 수 있다.
      • 이 경우에 부모 리지드바디(Rigidbody)가 자식 콜라이더를 단일 복합 콜라이더로 한꺼번에 제어한다.
    • 휠 콜라이더는 솔리드 오브젝트라는 점에서 엄밀히 콜라이더는 아니지만 높은 CPU 오버헤드를 유발한다. 
      • ▲ Wheel Collider
         

위 정리들은 Unity 매뉴얼에 나와있는 글들 중 내가 당장 읽으면서 이해하고 구현할 수 있는 점만 정리했으며 실제로는 더욱 많은 최적화 방법이 존재한다.

무엇보다도 최적화를 하기위해서는 CPU와 GPU등 하드웨어에 대한 지식을 익히고 드로우 콜, 쓰로틀링 등을 학습하고 오는것이 적절하다고 생각된다. (생각보다 큰일인데..?)

 


https://www.youtube.com/watch?v=4kVffWfmJ60 

https://ajh322.tistory.com/257

 

유니티 데브윅스 요약 - 성능 프로파일링과 최적화

https://www.youtube.com/watch?v=4kVffWfmJ60 오늘은 네임드 개발자 오즈라엘님이 "성능 프로파일링과 최적화"라는 귀한 주제로 발표를 해주셨다. 두 시간짜리 영상을 열심히 보고 요약글을 올리는 나한테

ajh322.tistory.com

위 블로그에서 유니티 데브윅스 영상을 보고 정리한 글이다.

최적화내용들이 상당히 잘 정리되어있다. 영상을 꼭 봐보도록 하자