경로 찾기 알고리즘 : A Pathfinding* Algorithm
·
C#/Algorithm
A* 알고리즘 A* 알고리즘은 경로찾기 알고리즘 중 하나로, 출발지점부터 목적지점까지의 최적 경로를 탐색합니다. 이 알고리즘은 가중치 그래프에서 최단 경로를 찾는 데 사용됩니다. A* 알고리즘은 다음과 같은 특징을 가지고 있습니다. 휴리스틱 함수를 사용하여 최적 경로를 탐색합니다. 경로의 비용을 계산하고, 비용이 가장 적은 경로를 선택합니다. 경로를 찾는 과정에서 이동할 수 있는 모든 경로를 검사합니다. A* 알고리즘은 C#에서 구현하기 쉽고, 많은 개발자들이 사용하고 있습니다. A* 알고리즘 구현 A* 알고리즘을 구현하기 위해서는 다음과 같은 단계를 따르면 됩니다. 출발점과 목적지점을 설정합니다. 휴리스틱 함수를 구현합니다. 우선순위 큐를 구현합니다. A* 알고리즘을 구현합니다. 출발점과 목적지점 설정..
Unity 가비지 컬렉션 최적화
·
Unity/Tip
Unity는 게임 개발을 위한 대표적인 엔진 중 하나입니다. 하지만 게임 제작 과정에서 메모리 관리는 항상 큰 과제 중 하나입니다. 이번 글에서는 Unity에서 가비지 컬렉션 최적화를 위해 알아두어야 할 내용들에 대해 자세하게 살펴보겠습니다. 가비지 컬렉션이란? 가비지 컬렉션은 프로그램이 동적으로 할당한 메모리 영역 중에서 더 이상 사용하지 않는 영역을 해제하여 다시 사용 가능한 영역으로 만드는 프로세스입니다. 이를 통해 메모리 누수를 방지하고 시스템의 성능을 최적화할 수 있습니다. 그러나 가비지 컬렉션 자체가 성능 저하를 일으키기도 합니다. 따라서 가비지 컬렉션을 최대한 효율적으로 처리하기 위해서는 가비지 컬렉션이 발생하는 시기를 정확히 파악해야 합니다. 유니티에서 사용하는 두가지 메모리 풀 유니티에서..
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() { ..