ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] Unity 최적화
    TIL 2024. 7. 4. 09:59

     

    유니티 최적화에 대해서

    어느정도 성능을 가늠할 수 있게 제공해주는 유니티 제공 툴

    Status

    Game뷰에는 이렇게 오른쪽 구석에 Status를통해 실시간 렌더링 통계 확인할 수 있다.

     

    FPS: 하나의 게임 프레임을 처리하고 렌더링 하는 데 걸리는 시간

    Batches: 배치된 오브젝트를의 수(UI 포함) 

    SetPassCall: 낮추려면 머터리얼을 병합하거나 쉐이더를 병합해야한다고 한다.. TA쪽 일이라 하니 알아만 두자

     

     

    https://docs.unity3d.com/kr/530/Manual/RenderingStatistics.html

     

    렌더링 통계 창 - Unity 매뉴얼

    Game View 의 오른쪽 상단에 있는 Stats 버튼을 누르면 성능을 최적화하는 데 유용한 실시간 렌더링 통계가 표시된 오버레이 창이 나타납니다. 표시되는 통계는 빌드 타겟에 따라 조금씩 다릅니다.

    docs.unity3d.com

    Frame Debugger

    Window-Analysis-FrameDebugger

      Enable을 누르면 화면이 그려지는 과정을 볼 수 있다. 이게 다 드로우콜 과정

     

    프로파일러 (Profiler)

    성능 정보를 알려주는 툴

    프로파일러는 성능 데이터를 수잡하고 표시를 한다.

    Window- Analysis-Profiler

     

    실행했을 때 사진

    위에서 설명한 Status보다 좀 더 자세하게 보여진다.

    주로 그래프가 널뛰는 부분을 타고 들어가서 정리하면 좋다.

     

    DeepProfiler

     

    프로파일러는 DeepProfile이라는 모드가 있다.

    위에서 측정한 것 보다 더 자세하게 체크하고 통계를 내준다.

     

    프로파일러를 쓸 때 주의할 점

    에디터에서 돌리는것이 빌드했을 때의 성능 그대로 나오지 않는다.

     

    특히 3D는 더 정확하게 측정하기 어렵다고 하니 단순히 참고용으로 돌려보는 것이 좋다.

    실제 프레임은 빌드에서 체크!

     

     

    추가적인 최적화 방법

    모바일 프레임 제한

    모바일은 프레임이 높을 수록 발열이 생기고 배터리가 빨리 닳는다.

    따라서 모바일로 게임을 제작할 경우 프레임 제한을 걸어두는 것이 좋다.

    정적인 모바일게임은 30 프레임으로 제한을 걸어도 큰 문제가없다.

     

    이미지 크기

    실제 인 게임에 사용되는 사이즈보다 엄청 크게 설정되있는 경우가 있다.
    이미지 max사이즈의 자체의 크기를 줄여도 게임에서는 문제가 없어보이기 때문에  크게 써야할게 아니면 max 사이즈를 줄여도 된다. 

     

    텍스쳐 POT  맞추기

    POT란?

    PowerOfTwo 라는 의미로 가로 세로가 2의 제곱인 형태를 말한다.

    텍스쳐가 POT 형식이 아닐 경우 변형해 사용하므로 메모리 낭비가 발생할 수 있다.

    아틀라스를 32, 64,128 등으로 맞춰주면 좋다.

     

    Corutine에서 Wait문 할당해서 쓰기

    new yield return이 가비지를 생성하기 때문에 할당해두고 사용하면 좋다

     //예시 코드
     WaitForSeconds wait;
     
      private void Awake()
     {
         wait = new WaitForSeconds(1f);
     }
     
      private IEnumerator Test()
     {
         yield return wait;
     }

    최대한 new들어가는 지양하는게 낫다.

     

     

    기타 참고할 사항

    DebugLog 있는 채로 빌드하지 않기.

    유니티가 걸러주지 않는다고 한다, 대체용으로 Debug.Aeerts (bool, 값)는 빌드할 때 알아서 제거되고 조건식에 따라 출력하니 참고하면 좋을 것같다. 

    대신 Assert는 경고창이 아닌 로그창에 뜬다고 한다.  

    Debug.Aeerts (bool, 값) 얘는 빌드할떄 알아서 제거되고 조건식에 따라 출력된다.
    대신 Debug.LogAssert 로그창이 아닌 오류창에 뜬다

    오브젝트풀 활용하기

    부시고 생성할때 가비지가 생성되기 때문에 처음에 많이 생성하고 SetActive를 활용하여 껐다 키는게 성능적으로 낫다고 한다.

     

    Find 함수 지양하기

    참고로 Camera main 는 Find계열이라한다 .

    Camera cam;
    cam= Camera.main

    으로 한번만 캐싱해주기

    안쓰는 Update문 지우기


    Vector 연산할때 맨 마지막에 곱해주기

    Vector3 dir;
    float speed;
    transform.position += dir*speed*Time.deltaTime; //9번 연산
    transform.position += speed*Time.deltaTime*dir;// 3번 연산?

    이런식으로 뒤에 넣는게 연산량이 적어진다 한다.

     

    LINQ 사용 자제하기

    최근의 C#은 LINQ를 사용해도 큰 문제가 없다하지만 유니티는 낮은 버전의 프레임워크를 사용하기 때문에 자제하는 것이 낫다고 한다.







    'TIL' 카테고리의 다른 글

    [TIL] 관찰자 패턴, 전략 패턴  (3) 2024.06.20
    [TIL]RenderingPipeline, ShaderGraph 기초  (0) 2024.06.18
    [TIL] 멀티 시스템 기초 지식  (0) 2024.06.17
    [TIL] 파티클시스템, 애니메이션 이벤트  (0) 2024.06.12
    [TIL] 자료구조  (1) 2024.06.08
Designed by Tistory.