[C#, Unity, 절차적 생성] 절차적 던전 생성 - 3. BSP 알고리즘 개선
·
Unity,C#/절차적생성(PCG)
2025/05/15- 조건부 분할 위치를 계산하는 부분에서 offset * 2를 기준으로 방 최소 사이즈를 만족하는지 확인하는 코드 수정.- 코드 변경에 따른 최종 결과 갱신.■ BSP 알고리즘 개선 현재 구현된 BSP 알고리즘은 분할 조건이 단순하기 때문에, 분할 방향이 한쪽(가로 또는 세로)으로만 생성되어 지나치게 긴 복도가 생성되는 경우가 존재한다.따라서 추가 조건을 생성하여 균등하게 공간이 분할될 수 있도록 수정한다. 1. 분할 방향 조건 추가var widthStatus = node.Width >= _data.RoomMinWidth * 2;var heightStatus = node.Height >= _data.RoomMinHeight * 2;var splitDir = (widthStatus, he..
[C#, Unity, 절차적 생성] 절차적 던전 생성 - 2. 방 생성
·
Unity,C#/절차적생성(PCG)
■ 방 생성 BSP 알고리즘을 통해 공갈이 분할되면, 자식이 없는 단말(리프) 노드에 실제 방을 생성해야 한다. 단말 노드들은 더 이상 분할되지 않는 영역이기 때문이다.private List GetAllLeafNode(){ var leafNodes = new List(); var queue = new Queue(new[] { _roomNodeList[0] }); while (queue.Count > 0) { var node = queue.Dequeue(); if (node.ChildNode.Count 너비 우선 탐색(BFS) 방식으로 트리를 순회하며, 자식 노드가 없는 경우(단말 노드)만 리스트에 추가한다. ■ 방 생성 구현public class RoomGenerator{ private..
[C#, Unity, 절차적 생성] 절차적 던전 생성 - 1. Binary Space Partitioning
·
Unity,C#/절차적생성(PCG)
2025-05-15 (수정사항)- NodePosition을 초기화 할 때 (좌상단, 우하단)기준에서 (좌하단, 우상단)기준으로 초기화하도록 수정. ■ 이진 공간 분할법 - Binary Space Partitioning(BSP) BSP 알고리즘은 공간을 재귀적으로 둘로 분할해 가며 이진트리를 구성하는 알고리즘이다. 최종적으로 자식이 없는 리프 노드에 각 분할된 공간이 저장된다.이를 활용하여 던전등의 지형을 절차적으로 생성할 수 있다. BSP 알고리즘 동작 순서현재 공간의 분할 방향(수직, 수평)을 결정한다.선택된 방향으로 공간을 2개로 분할, 이 공간을 큐에 추가한다.분할된 공간에 대해 1~2번의 과정을 더 이상 분할이 불가능할때까지 반복한다. ■ BSP 구현1. BSP 트리 노드 구성using Syste..