Unity 가비지 컬렉션 최적화
·
Unity/Tip
Unity는 게임 개발을 위한 대표적인 엔진 중 하나입니다. 하지만 게임 제작 과정에서 메모리 관리는 항상 큰 과제 중 하나입니다. 이번 글에서는 Unity에서 가비지 컬렉션 최적화를 위해 알아두어야 할 내용들에 대해 자세하게 살펴보겠습니다. 가비지 컬렉션이란? 가비지 컬렉션은 프로그램이 동적으로 할당한 메모리 영역 중에서 더 이상 사용하지 않는 영역을 해제하여 다시 사용 가능한 영역으로 만드는 프로세스입니다. 이를 통해 메모리 누수를 방지하고 시스템의 성능을 최적화할 수 있습니다. 그러나 가비지 컬렉션 자체가 성능 저하를 일으키기도 합니다. 따라서 가비지 컬렉션을 최대한 효율적으로 처리하기 위해서는 가비지 컬렉션이 발생하는 시기를 정확히 파악해야 합니다. 유니티에서 사용하는 두가지 메모리 풀 유니티에서..
Binary Space Partitioning (BSP)란?
·
Unity/Tip
Binary Space Partitioning (BSP)는 3D 그래픽스와 게임 엔진에서 사용되는 공간 분할 알고리즘 중 하나입니다. 이 알고리즘은 공간을 반복적으로 분할하여, 적은 계산으로 복잡한 3D 공간을 표현할 수 있습니다. 이를 통해 게임의 렌더링 속도를 높이는 등의 효과를 볼 수 있습니다. BSP 알고리즘 구현하기 BSP 알고리즘을 구현하는 방법은 다음과 같습니다. 맵을 노드로 분할합니다. 맵의 중심에서부터 노드를 분할하면서, 분할하는 평면을 결정합니다. 이때 평면은 맵에 있는 임의의 평면으로 설정합니다. 분할된 노드를 왼쪽과 오른쪽 서브트리로 분할합니다. 왼쪽 서브트리에는 평면에 속하지 않는 부분을, 오른쪽 서브트리에는 평면에 속하는 부분을 배치합니다. 서브트리에 대해 재귀적으로 분할 작업을..
Unity 최적화 기법
·
Unity/Tip
Unity는 게임 개발에 필요한 다양한 기능과 높은 생산성을 제공하는 대신, 높은 하드웨어 요구 사항을 가지고 있습니다. 게임을 개발할 때, 최적화 기법은 반드시 고려되어야 합니다. 이번 블로그에서는 Unity 최적화 기법 중 class와 struct를 적절하게 사용하는 방법, Immutable과 String 반복 생성 문제 해결, 비용이 큰 수학 연산 줄이기에 대해 자세하게 설명하겠습니다. Class와 Struct를 적절하게 사용하는 방법 Class와 Struct는 모두 데이터와 메서드를 포함하는 타입입니다. 하지만 두 타입은 다른 방식으로 동작합니다. Class는 참조 타입으로, Heap에 할당되고, Garbage Collector에 의해 관리됩니다. 반면, Struct는 값 타입으로, Stack에 ..
GameObject의 Missing Script 삭제 자동화
·
Unity/Tip
다음은 누락된 스크립트를 자동으로 제거하는 코드입니다. 이 코드를 사용하면 선택한 게임 오브젝트에서 누락된 스크립트를 모두 제거할 수 있습니다. using UnityEditor; using UnityEngine; public class SelectGameObjectsWithMissingScripts : Editor { [MenuItem("Utility/Remove Missing Script")] private static void RemoveAllMissingScriptComponents() { var selectedGameObjects = Selection.gameObjects; int totalComponentCount = 0; int totalGameObjectCount = 0; foreach (v..
Unity에서 유용한 클래스 이름
·
Unity/Tip
유니티에서 클래스 이름을 작성할 때 유용한 단어와 설명입니다. Controller : 게임 엔티티를 제어하는 클래스로, PlayerController나 EnemyController와 같은 것이 있습니다. Manager : 게임의 여러 측면을 관리하거나 감독하는 클래스로, GameManager나 AudioManager와 같은 것이 있습니다. System : 게임에 특정 시스템을 구현하는 클래스로, InventorySystem이나 DialogueSystem과 같은 것이 있습니다. Data : 데이터를 저장하고 처리하는 클래스로, PlayerData나 GameData와 같은 것이 있습니다. Handler : 특정 작업이나 이벤트를 처리하는 클래스로, InputHandler나 CollisionHandler와 같..
Unity의 컨디셔널 컴플리션(Conditional Compilation)
·
Unity/Tip
Unity의 컨디셔널 컴플리션은 특정 조건에 따라 코드를 컴파일하거나 제외하는 기능입니다. 이를 통해 특정 플랫폼에서만 실행되는 코드를 작성하거나, 디버그 모드에서만 실행되는 코드를 작성할 수 있습니다. 이 기능은 유니티에서 특정 컴파일러 지시문을 사용하여 구현됩니다. 사용 방법 컨디셔널 컴플리션을 사용하려면 다음과 같은 형식의 지시문을 작성합니다. #if // code to be compiled if condition is true #else // code to be compiled if condition is false #endif 여기서 은 특정 조건입니다. 이 조건은 다양한 방법으로 설정될 수 있습니다. 예를 들어, 다음과 같은 조건을 사용하여 특정 플랫폼에서만 실행되는 코드를 작성할 수 있습니다..
Unity Debuging
·
Unity/Tip
Unity에서는 디버깅을 위한 다양한 도구와 클래스를 제공합니다. 이번에는 디버그 클래스에 대해 알아보겠습니다. Debug 클래스 Debug 클래스는 디버깅에 유용한 여러 메서드를 제공합니다. Debug 클래스는 UnityEngine 네임스페이스에 속해 있으므로, 다음과 같이 using 문을 추가하여 사용합니다. using UnityEngine; public class MyClass : MonoBehaviour { private void Start() { Debug.Log("Hello, World!"); } } 위 예제에서는 Start 메서드에서 Debug.Log 메서드를 호출하여 "Hello, World!"를 출력합니다. Log 메서드 Log 메서드는 디버깅을 위한 가장 일반적인 메서드입니다. Log ..
Unity에서 플레이 중 Recompile을 해제하는 방법
·
Unity/Tip
Unity에서 코드를 수정하면 자동으로 Recompile이 되어 재생되는데, 이 과정에서 멈추고 싶은 경우가 있습니다. 예를 들어, 스크립트를 수정할 때마다 씬이 재생되는 것이 불편하거나, 플레이중인 게임이 멈추는 것이 싫을 경우 등이 그 예입니다. 이번 글에서는 이러한 경우에 Recompile을 해제하는 방법에 대해 알아보겠습니다. Play Mode Script Change 옵션 Unity에서는 Play Mode Script Change 옵션을 제공합니다. 이 옵션을 사용하면 플레이 모드 중에 스크립트를 수정해도 자동으로 Recompile이 되지 않습니다. Play Mode Script Change 옵션을 사용하려면 다음과 같이 설정하면 됩니다. Unity에서 Edit > Preferences를 클릭합..