Unity

    Unity 가비지 컬렉션 최적화

    Unity는 게임 개발을 위한 대표적인 엔진 중 하나입니다. 하지만 게임 제작 과정에서 메모리 관리는 항상 큰 과제 중 하나입니다. 이번 글에서는 Unity에서 가비지 컬렉션 최적화를 위해 알아두어야 할 내용들에 대해 자세하게 살펴보겠습니다. 가비지 컬렉션이란? 가비지 컬렉션은 프로그램이 동적으로 할당한 메모리 영역 중에서 더 이상 사용하지 않는 영역을 해제하여 다시 사용 가능한 영역으로 만드는 프로세스입니다. 이를 통해 메모리 누수를 방지하고 시스템의 성능을 최적화할 수 있습니다. 그러나 가비지 컬렉션 자체가 성능 저하를 일으키기도 합니다. 따라서 가비지 컬렉션을 최대한 효율적으로 처리하기 위해서는 가비지 컬렉션이 발생하는 시기를 정확히 파악해야 합니다. 유니티에서 사용하는 두가지 메모리 풀 유니티에서..

    Binary Space Partitioning (BSP)란?

    Binary Space Partitioning (BSP)는 3D 그래픽스와 게임 엔진에서 사용되는 공간 분할 알고리즘 중 하나입니다. 이 알고리즘은 공간을 반복적으로 분할하여, 적은 계산으로 복잡한 3D 공간을 표현할 수 있습니다. 이를 통해 게임의 렌더링 속도를 높이는 등의 효과를 볼 수 있습니다. BSP 알고리즘 구현하기 BSP 알고리즘을 구현하는 방법은 다음과 같습니다. 맵을 노드로 분할합니다. 맵의 중심에서부터 노드를 분할하면서, 분할하는 평면을 결정합니다. 이때 평면은 맵에 있는 임의의 평면으로 설정합니다. 분할된 노드를 왼쪽과 오른쪽 서브트리로 분할합니다. 왼쪽 서브트리에는 평면에 속하지 않는 부분을, 오른쪽 서브트리에는 평면에 속하는 부분을 배치합니다. 서브트리에 대해 재귀적으로 분할 작업을..

    Unity 최적화 기법

    Unity는 게임 개발에 필요한 다양한 기능과 높은 생산성을 제공하는 대신, 높은 하드웨어 요구 사항을 가지고 있습니다. 게임을 개발할 때, 최적화 기법은 반드시 고려되어야 합니다. 이번 블로그에서는 Unity 최적화 기법 중 class와 struct를 적절하게 사용하는 방법, Immutable과 String 반복 생성 문제 해결, 비용이 큰 수학 연산 줄이기에 대해 자세하게 설명하겠습니다. Class와 Struct를 적절하게 사용하는 방법 Class와 Struct는 모두 데이터와 메서드를 포함하는 타입입니다. 하지만 두 타입은 다른 방식으로 동작합니다. Class는 참조 타입으로, Heap에 할당되고, Garbage Collector에 의해 관리됩니다. 반면, Struct는 값 타입으로, Stack에 ..

    Unity의 OnApplicationQuit, OnDisable, OnDestroy 이벤트 함수의 차이점

    Unity에서는 게임 오브젝트가 파괴되기 전에 작업을 수행할 수 있는 여러 이벤트 함수를 제공합니다. 이번 글에서는 그 중 onApplicationQuit, OnDisable, OnDestroy 이벤트 함수에 대해 자세히 살펴보겠습니다. onApplicationQuit onApplicationQuit 함수는 게임이 종료될 때 호출되는 함수입니다. 이 함수는 게임 오브젝트에 속하지 않은 전역 함수이므로, 모든 스크립트에서 사용할 수 있습니다. onApplicationQuit 함수는 다음과 같이 정의할 수 있습니다. void onApplicationQuit() { // 게임이 종료될 때 수행할 작업 } onApplicationQuit 함수는 게임이 종료될 때 한 번만 호출되며, 호출 이후에는 어떠한 코드도 ..

    GameObject의 Missing Script 삭제 자동화

    다음은 누락된 스크립트를 자동으로 제거하는 코드입니다. 이 코드를 사용하면 선택한 게임 오브젝트에서 누락된 스크립트를 모두 제거할 수 있습니다. 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..

    Kingdom : Idle Defense 개인정보처리 방침

    ('https://coding-shop.tistory.com/'이하 '끄적끄적 코딩 공방')은(는) 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립·공개합니다. ○ 이 개인정보처리방침은 2023년 5월 14부터 적용됩니다. 제1조(개인정보의 처리 목적) ('https://coding-shop.tistory.com/'이하 '끄적끄적 코딩 공방')은(는) 다음의 목적을 위하여 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등..

    Unity에서 유용한 클래스 이름

    유니티에서 클래스 이름을 작성할 때 유용한 단어와 설명입니다. Controller : 게임 엔티티를 제어하는 클래스로, PlayerController나 EnemyController와 같은 것이 있습니다. Manager : 게임의 여러 측면을 관리하거나 감독하는 클래스로, GameManager나 AudioManager와 같은 것이 있습니다. System : 게임에 특정 시스템을 구현하는 클래스로, InventorySystem이나 DialogueSystem과 같은 것이 있습니다. Data : 데이터를 저장하고 처리하는 클래스로, PlayerData나 GameData와 같은 것이 있습니다. Handler : 특정 작업이나 이벤트를 처리하는 클래스로, InputHandler나 CollisionHandler와 같..

    C# Action과 UnityEvent의 차이점

    C#을 사용하여 Unity에서 개발할 때 개발자는 이벤트를 처리하는 다양한 방법과 위임 메서드 중에서 선택하는 경우가 많습니다. 일반적으로 사용되는 옵션 중 두 가지는 내장된 C# 대리자 유형인 'Action'과 Unity 고유의 'UnityEvent'입니다. 하지만 정확히 무엇이 그들을 구별하는가? 이번 포스팅에서는 Action과 UnityEvent의 차이점, 장단점을 살펴보겠습니다. C# Action C#의 System 네임스페이스의 일부인 Action은 최대 16개의 입력 매개변수를 사용하지만 값을 반환하지 않는 메서드를 가리킬 수 있는 대리자입니다. 이는 사용자 지정 대리자를 정의하지 않고 메서드를 대리자로 표현하는 수단입니다. 다음은 c# action을 사용한 예시 코드입니다. public cl..