Unity는 게임 개발에 필요한 다양한 기능과 높은 생산성을 제공하는 대신, 높은 하드웨어 요구 사항을 가지고 있습니다. 게임을 개발할 때, 최적화 기법은 반드시 고려되어야 합니다. 이번 블로그에서는 Unity 최적화 기법 중 class와 struct를 적절하게 사용하는 방법, Immutable과 String 반복 생성 문제 해결, 비용이 큰 수학 연산 줄이기에 대해 자세하게 설명하겠습니다.
Class와 Struct를 적절하게 사용하는 방법
Class와 Struct는 모두 데이터와 메서드를 포함하는 타입입니다. 하지만 두 타입은 다른 방식으로 동작합니다. Class는 참조 타입으로, Heap에 할당되고, Garbage Collector에 의해 관리됩니다. 반면, Struct는 값 타입으로, Stack에 할당되고 Garbage Collector에 의해 관리되지 않습니다.
따라서 많은 데이터를 가진 객체를 생성할 때, Class를 사용하면 Heap 메모리에 할당되기 때문에 GC가 자주 발생하여 성능이 저하될 수 있습니다. 반면 Struct를 사용하면 Stack 메모리에 할당되기 때문에 메모리 사용이 효율적이고, GC가 발생하지 않으므로 성능이 향상됩니다.
Immutable과 String 반복 생성 문제 해결
Immutable이란 변경할 수 없는 객체를 말합니다. C#의 String 타입은 Immutable입니다. 즉, String 객체를 변경하면 새로운 String 객체가 생성됩니다. 이러한 성질 때문에 문자열 연산을 반복적으로 수행하면 메모리 낭비가 심해집니다.
이러한 문제를 해결하기 위해서는 StringBuilder 클래스를 사용하면 됩니다. StringBuilder 클래스는 Mutable한 타입으로, 문자열을 수정할 때 새로운 객체를 생성하지 않고 기존 객체를 변형합니다. 따라서 문자열 연산을 반복할 때는 StringBuilder를 사용해야 합니다.
비용이 큰 수학 연산 줄이기
게임을 개발할 때, 수학 연산은 매우 빈번하게 일어나는 작업 중 하나입니다. 수학 연산은 CPU 자원을 많이 사용하기 때문에 프레임 드랍이 발생할 수 있습니다. 이러한 문제를 해결하기 위해서는 다음과 같은 방법들이 있습니다.
1. 적절한 데이터 구조 사용
데이터 구조를 적절하게 사용하면 수학 연산을 줄일 수 있습니다. 예를 들어, 3D 게임에서 물체 간 충돌을 검사할 때는 바운딩 박스(Bounding Box)를 사용하여 충돌 검사를 수행할 수 있습니다. 이렇게 하면 물체의 모든 꼭지점을 검사하지 않아도 충돌을 검출할 수 있습니다.
2. 사전 계산
수학 연산이 많은 경우, 미리 계산해둘 수 있는 부분은 미리 계산해 두는 것이 좋습니다. 예를 들어, Sin, Cos, Tan 함수는 계산 비용이 큰 함수입니다. 이러한 함수의 결과 값을 미리 계산해 두면, 매번 함수를 호출하지 않아도 되므로 성능을 향상시킬 수 있습니다.
3. SIMD(Single Instruction Multiple Data) 사용
SIMD는 하나의 명령으로 여러 데이터를 동시에 처리하는 기술입니다. SIMD를 사용하면 수학 연산을 병렬로 처리할 수 있으므로 성능을 향상시킬 수 있습니다. Unity에서는 Vector 클래스를 사용하여 SIMD를 지원합니다.
결론
Unity 최적화 기법 중, Class와 Struct를 적절하게 사용하는 방법, Immutable과 String 반복 생성 문제 해결, 비용이 큰 수학 연산 줄이기에 대해 알아보았습니다. 이러한 최적화 기법을 사용하면 게임의 성능을 향상시킬 수 있습니다. 하지만 최적화는 항상 트레이드 오프가 존재하므로, 상황에 맞게 적절하게 사용해야 합니다.
'Unity > Tip' 카테고리의 다른 글
Unity 가비지 컬렉션 최적화 (0) | 2023.06.13 |
---|---|
Binary Space Partitioning (BSP)란? (0) | 2023.06.12 |
GameObject의 Missing Script 삭제 자동화 (0) | 2023.05.17 |
Unity에서 유용한 클래스 이름 (0) | 2023.05.13 |
Unity의 컨디셔널 컴플리션(Conditional Compilation) (0) | 2023.05.10 |