Unity 내일배움캠프 TIL 1025 | Unity에서 CPU 성능 최적화

cheeseonrose·2023년 10월 25일
0

Unity 내일배움캠프

목록 보기
63/89
post-thumbnail

💡 Unity에 대한 성능 추천 사항

🐻 CPU 성능 추천 사항

  • 캐시 참조를 사용하자
    • GetComponent 및 Camera.main과 같은 반복적인 함수 호출 비용이 포인터를 저장하는 메모리 비용보다 비싸다
      → 초기화 시 관련 구성 요소 및 GameObject에 대한 참조를 캐싱하는 것이 좋음
    • Camera.main은 아래의 FindGameObjectsWithTag()만 사용
      → MainCamera 태그를 사용하여 카메라 개체를 검색하므로 많은 비용이 들어감
  • 비용이 많이 드는 작업을 지양하자
    • LINQ
      • 알고리즘을 수동으로 작성한 경우보다 더 많은 계산과 메모리 필요
    • 일반 Unity API
      • 유용하지만 실행 비용이 비쌈
      • 예 : Find 계열 함수, SendMessage(),
        BroadcastMessage()
    • Boxing
      • 박싱은 C# 언어 및 런타임의 핵심 개념
      • 메모리 할당이 발생하며, 삭제 시 가비지 수집기에서 처리 필요
        → 할당 취소가 성능 비용을 발생시킴
        → 더 비용이 저렴한 대안으로 대체 가능
      • 박싱을 방지하기 위해 숫자 자료형과 구조체를 저장하는 변수, 필드 및 속성의 형식이 object를 사용하는 대신 int, float 또는 MyStruct와 같은 특정 형식이어야 함
      • 또한 개체를 List나 ArrayList에 넣을 경우, List<Object>가 아닌 List<int>와 같이 선언
  • Update() 함수
    • Update 함수 내에 로직이 없다면 지울 것
    • 각 구성 요소에서 반복적이고 동일한 Raycast 작업을 수행하는 대신, Scene에서 Raycast를 응시하도록 처리
      → 이 결과를 다른 Scene 구성 요소에서 다시 사용하는 전용 Singleton 클래스 등을 사용하는 것이 좋음
    • Start() 또는 Awake()에서 캐싱 참조를 하여 Update() 내에서 반복적으로 GetComponent() 작업을 하는 것을 방지
    • 가능하다면 모든 개체를 인스턴스화하고 오브젝트 풀링을 사용하여 GameObject를 재활용하는 것이 좋음
    • 인터페이스
      • 인터페이스를 통한 함수 호출이나 virtual 함수를 호출하는 것이 직접 함수 호출을 활용하는 것보다 비용이 비쌈
        → 불필요한 인터페이스나 virtual 함수를 제거해야 함
      • 코드의 가독성과 유지 보수성 측면에서는 사용하는 것이 좋기 때문에 성능과의 절충안이 필요함
    • 값으로 구조체 전달 X
      • 구조체는 값 형식이기 때문에 함수에 직접 전달할 경우, 해당 내용을 새로 만든 인스턴스에 복사하게 됨
        → CPU 비용과 스택 메모리 추가
      • Update() 내에서는 함수 정의를 구조체가 아닌 참조로 전달하도록 수정
  • 기타
    • Physics
      • Physics에 소요되는 시간 또는 초당 반복 횟수를 제한
    • Collider
      • 성능 순서 : Sphere < Capsule < Box <<< Mesh(볼록) < Mesh(비볼록)
    • 애니메이션
      • Animator 구성 요소를 사용하지 않도록 설정



끗~!

0개의 댓글