Binary Space Partitioning (BSP)란?
·
Unity/Tip
Binary Space Partitioning (BSP)는 3D 그래픽스와 게임 엔진에서 사용되는 공간 분할 알고리즘 중 하나입니다. 이 알고리즘은 공간을 반복적으로 분할하여, 적은 계산으로 복잡한 3D 공간을 표현할 수 있습니다. 이를 통해 게임의 렌더링 속도를 높이는 등의 효과를 볼 수 있습니다. BSP 알고리즘 구현하기 BSP 알고리즘을 구현하는 방법은 다음과 같습니다. 맵을 노드로 분할합니다. 맵의 중심에서부터 노드를 분할하면서, 분할하는 평면을 결정합니다. 이때 평면은 맵에 있는 임의의 평면으로 설정합니다. 분할된 노드를 왼쪽과 오른쪽 서브트리로 분할합니다. 왼쪽 서브트리에는 평면에 속하지 않는 부분을, 오른쪽 서브트리에는 평면에 속하는 부분을 배치합니다. 서브트리에 대해 재귀적으로 분할 작업을..
C# Boxing
·
C#
C#은 객체 지향 프로그래밍 언어로, 값 형식과 참조 형식을 모두 지원합니다. 값 형식은 스택에 저장되고 참조 형식은 힙에 저장됩니다. 그런데 값 형식을 참조 형식으로 사용하려면 어떻게 해야 할까요? 이때, C# Boxing 개념이 필요합니다. Boxing이란? Boxing은 값 형식을 참조 형식으로 변환하는 과정을 말합니다. Boxing을 사용하면 값 형식을 힙에 저장할 수 있습니다. 이렇게 하면 값 형식이 참조 형식으로 사용됩니다. Boxing을 사용하면 값 형식을 참조 형식으로 사용할 수 있으므로, 값 형식과 참조 형식을 혼합하여 사용할 수 있습니다. Boxing의 예 다음은 Boxing의 간단한 예입니다. int i = 10; object obj = i; 위의 예제에서 i 변수는 int 값 형식입..
Unity 최적화 기법
·
Unity/Tip
Unity는 게임 개발에 필요한 다양한 기능과 높은 생산성을 제공하는 대신, 높은 하드웨어 요구 사항을 가지고 있습니다. 게임을 개발할 때, 최적화 기법은 반드시 고려되어야 합니다. 이번 블로그에서는 Unity 최적화 기법 중 class와 struct를 적절하게 사용하는 방법, Immutable과 String 반복 생성 문제 해결, 비용이 큰 수학 연산 줄이기에 대해 자세하게 설명하겠습니다. Class와 Struct를 적절하게 사용하는 방법 Class와 Struct는 모두 데이터와 메서드를 포함하는 타입입니다. 하지만 두 타입은 다른 방식으로 동작합니다. Class는 참조 타입으로, Heap에 할당되고, Garbage Collector에 의해 관리됩니다. 반면, Struct는 값 타입으로, Stack에 ..
C# Jump 문 : break, continue, return, goto
·
C#
소개 C#의 Jump 문은 실행 중인 코드의 흐름을 제어하는 데 사용됩니다. 이번 글에서는 C# Jump 문 중 break, continue, return 및 goto에 대해 자세히 살펴보겠습니다. break 문 break 문은 루프 또는 switch 문에서 실행 중인 코드의 흐름을 즉시 중단시키는 데 사용됩니다. 루프에서 break 문이 실행되면 루프가 즉시 종료됩니다. switch 문에서 break 문이 실행되면 switch 문이 종료됩니다. 다음은 break 문의 예입니다. for (int i = 0; i < 10; i++) { if (i == 5) { break; } Console.WriteLine(i); } 위의 예제에서 i가 5일 때 break 문이 실행되므로 루프가 종료됩니다. continu..
C# 메서드 매개변수 in, ref, out, param
·
C#
소개 C#에서 메서드는 다양한 매개변수를 사용하여 데이터를 전달받을 수 있습니다. 이번 글에서는 C#에서 사용되는 메서드 매개변수 중 in, ref, out, param에 대해 자세히 살펴보겠습니다. in 매개변수 in 매개변수는 값을 읽기 전용으로 전달하는 데 사용됩니다. in 매개변수를 사용하면 메서드 내에서 해당 매개변수의 값을 변경할 수 없습니다. in 매개변수를 사용하면 데이터를 보호하고 의도하지 않은 변경을 방지할 수 있습니다. public void Print(in int x) { Console.WriteLine(x); } 위의 예제에서 Print() 메서드는 in 매개변수를 사용하여 값을 읽기 전용으로 전달받습니다. 메서드 내에서 x 변수의 값을 변경하려고 하면 컴파일 오류가 발생합니다. r..
C# with 식
·
C#
소개 C# 8.0부터 도입된 with 식은 객체 초기화 코드를 간결하게 작성할 수 있도록 도와주는 기능입니다. C# 11.0에서는 with 식이 개선되어 더욱 간편하게 사용할 수 있게 되었습니다. 이번 글에서는 C# with 식에 대해 자세히 알아보겠습니다. with 식이란? with 식은 객체 초기화 코드를 간결하게 작성할 수 있도록 도와주는 기능입니다. 기존의 객체 초기화 방식은 매우 길고 복잡하여 가독성이 떨어졌습니다. with 식을 사용하면 객체 초기화 코드를 더욱 간결하게 작성할 수 있습니다. with 식의 예 다음은 with 식을 사용하여 객체를 초기화하는 간단한 예입니다. Person person = new() { Name = "John", Age = 30, Address = new() { ..
C# ? 연산자 : Null 조건부 연산자
·
C#
null 조건부 연산자란? null 조건부 연산자는 C# 6.0부터 지원되는 연산자로, null 값을 갖는 객체의 속성이나 메서드를 호출할 때 사용됩니다. null 조건부 연산자는 객체가 null인 경우 해당 속성이나 메서드를 호출하지 않으며, null이 아닌 경우 해당 속성이나 메서드를 호출합니다. null 조건부 연산자는 다음과 같은 형식으로 사용됩니다. object?.propertyOrMethod; 위의 코드에서 object는 호출할 객체를, propertyOrMethod는 호출할 속성이나 메서드를 나타냅니다. ? 연산자는 object가 null이 아닌 경우 propertyOrMethod를 호출하며, object가 null인 경우 호출하지 않습니다. null 조건부 연산자의 예 다음은 null 조건..
C# 배열 인덱싱
·
C#
소개 C#에서 배열은 많은 데이터를 처리하는 데 사용되는 중요한 자료구조 중 하나입니다. 배열의 인덱싱은 배열 내의 특정 위치에 있는 데이터를 참조하는 데 사용됩니다. 이번 글에서는 C#에서 배열의 인덱싱하는 방법 중에서 ..연산자와 ^연산자에 대해 자세하게 설명하겠습니다. 배열의 인덱싱 C#에서 배열의 인덱싱은 배열 내의 특정 위치에 있는 데이터를 참조하는 데 사용됩니다. 인덱싱에는 배열의 요소에 대한 참조 및 할당이 포함됩니다. 배열의 요소에 대한 참조는 대괄호([])를 사용하여 수행됩니다. int[] arr = { 1, 2, 3, 4, 5 }; int x = arr[2]; // arr의 세 번째 요소를 참조하여 x에 할당 위의 예제에서 arr[2]는 배열 arr의 세 번째 요소를 참조합니다. 이 요..