Perlin/Simplex Noise Algorithm
·
Unity/Tip
소개 Perlin Noise와 Simplex Noise는 프로시저럴 생성 알고리즘 중 가장 인기있는 알고리즘입니다. 이번 글에서는 Unity에서 Perlin/Simplex Noise를 생성하는 방법과 그 응용 예제를 살펴보겠습니다. Perlin Noise Perlin Noise는 1983년 Ken Perlin이 개발한 알고리즘으로, 자연스러운 잡음을 생성하는 데 사용됩니다. 이 알고리즘은 2차원 또는 3차원으로 구성된 그리드에서 각 좌표의 값에 대한 임의성을 추가하여 자연스러운 무작위 패턴을 만듭니다. Perlin Noise를 Unity에서 생성하려면 다음과 같은 코드를 사용합니다. public class PerlinNoise : MonoBehaviour { public float scale = 1f; ..
Boids/Flocking Algorithm
·
C#/Algorithm
소개 Boids/Flocking Algorithm은 모의 떼짓기 알고리즘으로써, 새떼, 물고기 떼, 개떼 등의 떼 집단에서의 행동을 모델링하는 알고리즘입니다. 이 알고리즘은 자연에서 나타나는 다양한 떼짓기 행동을 흉내내어, 가상의 떼집단을 시뮬레이션 하는 데 사용됩니다. 이번 글에서는 C#에서 Boids/Flocking Algorithm을 구현하는 방법에 대해 자세히 살펴보겠습니다. Boids/Flocking Algorithm이란? Boids/Flocking Algorithm은 크기, 위치, 방향 등의 속성을 가진 개체를 시뮬레이션하는 알고리즘입니다. 이 알고리즘은 개체가 떼를 지어 움직이는 행동을 모방하여, 가상의 떼집단을 구현할 수 있습니다. 이 알고리즘은 크게 3가지의 규칙을 적용하여 구현됩니다. ..
C# 패턴식 switch문
·
C#
소개 C# 8.0부터 패턴식 switch문이 추가되었습니다. 이전의 switch문보다 더욱 간결하고 유연한 코드를 작성할 수 있게 되었습니다. 이번 글에서는 C# 8.0의 패턴식 switch문의 종류와 사용법에 대해 자세하게 살펴보겠습니다. 패턴식 switch문이란? 패턴식 switch문은 switch문의 조건식에 패턴을 사용할 수 있게 해줍니다. 이를 통해 간결하고 유연한 코드를 작성할 수 있습니다. C# 8.0에서는 다양한 종류의 패턴을 사용할 수 있습니다. 상수 패턴 가장 기본적인 패턴은 상수 패턴입니다. 상수 패턴은 switch문의 조건식과 비교할 상수값을 사용합니다. string fruit = "apple"; switch (fruit) { case "apple": Console.WriteLine..
경로 찾기 알고리즘 : 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에 ..