시드(숫자) 하나와 몇 가지 설정만으로 익스트랙션 슈터용 던전(탈출 슈터, Tarkov·Dark and Darker 계열)을 자동으로 만들어 주는 Unity 도구입니다. 코드를 몰라도 메뉴 클릭과 값 입력만으로 지형·몬스터·보상·탈출구가 있는 레벨을 생성할 수 있습니다.
- 버튼 한 번으로 지형(산·평지·길) 과 그 위의 시작점·탈출구·몬스터·보상·보스가 자동 배치됩니다.
- 같은 시드 + 같은 설정 = 항상 같은 결과. 마음에 든 맵을 시드 숫자로 다시 불러올 수 있습니다.
- "플레이어가 달려서 60~120초면 탈출구에 도착" 같은 플레이 시간 기준으로 맵 크기가 자동 계산됩니다.
- 만든 던전이 실제로 끝까지 갈 수 있는지(막힌 길 없는지) 도구가 자동으로 검사합니다.
직접 만들기 전에, 미리 준비된 예제를 돌려서 어떤 결과가 나오는지 보세요.
- Unity 상단 메뉴에서
Tools ▸ ProcGen ▸ Sample ▸ Setup and Run Test를 클릭합니다. - 잠시 기다리면 씬(Scene)에 지형과 색색의 표시물이 생깁니다.
- 하단 Console 창에
[SampleTest] ... validation=PASS가 보이면 정상입니다.
이때 생기는 색의 의미:
| 색/모양 | 의미 |
|---|---|
| 🟦 파란 캡슐 | 시작점 (플레이어가 입장하는 곳) |
| 🟢 초록 원기둥 | 탈출구 (여기로 가면 탈출) |
| 🟡 금색 구 | 보상(전리품) |
| 🔴 빨강 캡슐 | 일반 몬스터 |
| 🟣 보라 캡슐 | 상급 몬스터(엘리트) |
| 🟥 진한 빨강(큰 것) | 보스 |
| ⬜ 회색 큐브 | 엄폐물 |
💡 결과가 마음에 안 들면 그냥 같은 메뉴를 다시 누르세요. 매번 같은 시드라 같은 결과가 나오고, 시드를 바꾸면(아래 4번) 새로운 맵이 나옵니다.
"에셋"은 설정을 담는 파일이라고 생각하면 됩니다. Project 창에서 마우스 우클릭 ▸ Create ▸ ProcGen ▸ … 로 만듭니다.
만들어야 할 것 (이름은 자유):
- Dungeon Profile — 던전 전체 설정을 모으는 메인 파일. (
Create ▸ ProcGen ▸ Dungeon Profile) - Movement Profile — 캐릭터 이동 속도. 걷기/달리기 속도를 넣습니다.
- Region Partitioner — 맵을 구역(외곽/중간/핵심)으로 나누는 설정.
- Extraction Placer — 탈출구 배치 규칙.
- Spawn Point Placer — 시작점 배치 규칙.
- Terrain Builder — 높이 정보를 실제 지형으로 만드는 설정.
- (선택) Interpreters — 몬스터/보상/엄폐물을 뿌리는 규칙.
Obstacle Placement,Field Spawner. - (선택) Validators — 검사기.
Reachability(길 막힘),Balance(거리),Pacing(이동 시간),Affordance(캐릭터 지원).
가장 빠른 방법: 위를 일일이 만들기 번거로우면 1번 샘플 메뉴를 한 번 실행하세요.
Assets/Sample/SO/폴더에 위 파일들이 전부 자동으로 만들어집니다. 그걸 복사해서 값만 바꿔 써도 됩니다.
Project에서 만든 Dungeon Profile을 클릭하면 오른쪽 Inspector에 설정이 보입니다. 주요 항목:
- Master Seed: 맵을 결정하는 숫자. 바꾸면 다른 맵이 됩니다.
- Scale Mode:
TimeBased(추천) — 아래 Movement와 Spawn To Extraction Time으로 맵 크기를 자동 계산.Manual— World Size(맵 크기)를 직접 숫자로 지정.
- Movement: 위에서 만든 Movement Profile을 끌어다 넣습니다.
- Spawn To Extraction Time Seconds: "시작점→가장 가까운 탈출구"까지 걸리길 원하는 시간(초). 예:
60 ~ 120. - Stage A — Fields:
Height/Risk/Loot Stack각각에 노이즈 레이어를 1개 이상 넣습니다(지형/위험도/보상 분포). 샘플 값을 참고하세요. - Region Partitioner / Extraction Placer / Spawn Point Placer / Terrain Builder: 만든 에셋을 각 칸에 넣습니다.
- Interpreters / Validators: 몬스터·보상·검사기 에셋들을 목록에 넣습니다.
위험도(Risk)가 높은 곳일수록 몬스터·보스가 모이고, 그 구역은 지형이 평지로 펴져 전투 공간이 됩니다. 시작점↔탈출구 사이에는 길이 자동으로 패입니다.
상단 메뉴 Tools ▸ ProcGen ▸ Dungeon Preview 를 열면 작은 창이 뜹니다.
- Profile 칸에 내 Dungeon Profile을 끌어다 넣습니다.
- 창에 표시되는 Scale 정보로 자동 계산된 맵 크기와 예상 이동 시간을 확인합니다.
- 버튼 사용법:
| 버튼 | 하는 일 |
|---|---|
| Regenerate Preview | 높이/위험/보상/구역 4종 지도를 그림으로 미리보기 (위 탭으로 전환) |
| Randomize Seed | 새 시드로 랜덤. 마음에 드는 게 나올 때까지 누르세요 |
| Generate Layout | 시작점·탈출구·POI 위치를 계산해 씬에 표시(기즈모: 🟧POI 🟢탈출 🟦시작) |
| Validate Layout | 막힌 길/거리/시간 문제를 검사해 목록으로 보여줌 (없으면 "All validators passed") |
| Target Root + Apply to Scene | 실제로 씬에 지형과 모든 오브젝트를 생성 (Ctrl+Z로 되돌리기 가능) |
| Seed Gallery | 마음에 든 시드를 저장/복원 |
실제 맵을 만드는 순서: ① Profile 넣기 → ② Randomize Seed로 원하는 모양 찾기 → ③ Generate Layout으로 배치 확인 → ④ Validate로 문제 없는지 확인 → ⑤ Target Root에 빈 게임오브젝트를 넣고 Apply to Scene.
Target Root: 씬에 빈 게임오브젝트를 하나 만들고(Hierarchy 우클릭 ▸ Create Empty) 그걸 이 칸에 넣으세요. 생성물이 그 아래에 정리되어 들어갑니다.
Terrain Builder 에셋에서:
- Terrain Height: 지형의 높낮이 정도(작을수록 평평).
- Path Corridor Width: 자동으로 패이는 길의 폭.
- Combat Risk Range / Flatten Strength: 어느 정도 위험한 곳부터 평지로 만들지, 얼마나 평평하게 할지.
Spawn / Extraction Placer 에셋에서:
- Count: 시작점/탈출구 개수.
- Acceptable Risk Range: 어느 위험도 구간에 배치할지.
Dungeon Profile에서:
- Spawn To Extraction Time Seconds: 한 판의 길이(이동 시간). 늘리면 맵이 커집니다.
- Max Regeneration Attempts: 검사 실패 시 시드를 바꿔가며 다시 시도하는 횟수.
- "validation=PASS가 안 떠요 / unreachable 이 나와요" → 지형이 너무 가파르거나(Terrain Height를 낮추세요) 시작점·탈출구가 맵 끝에 너무 붙은 경우입니다. Apply를 다시 누르면 시드를 바꿔가며 자동 재시도합니다.
- "오브젝트가 너무 많아요" → Interpreter(Obstacle/Field Spawner)의 threshold(임계값) 를 올리거나 density(밀도) 를 낮추세요.
- "같은 맵을 다시 보고 싶어요" → Seed Gallery에 저장하거나 Master Seed 숫자를 적어두세요.
- 시드(Seed): 맵을 결정하는 숫자. 같으면 같은 맵.
- 필드(Field): 맵 전체에 깔린 값의 지도. Height=높이, Risk=위험도, Loot=보상, Region=구역.
- POI: 주요 거점(보스방·시설 등).
- NavMesh: 캐릭터가 걸어다닐 수 있는 영역. 이게 끊기면 "갈 수 없는 길"이 됩니다.
- 어포던스(Affordance): 엄폐물·고지대처럼 특정 플레이스타일에 필요한 환경 요소.
Assets/ProcGen/ 폴더를 프로젝트에 복사하면 끝입니다.
- 어셈블리 분리:
ProcGen.Runtime(외부 패키지 하드 의존 없음) /ProcGen.Editor(에디터 전용, 빌드 제외). - NavMesh 검증은 내장
UnityEngine.AI모듈 사용(별도 패키지 불필요). 외부 라이브러리 FastNoise Lite는 충돌 방지를 위해Game.ProcGen.ThirdParty네임스페이스로 포함. - 결정론: 모든 난수는 시드 기반
System.Random으로 전파(UnityEngine.Random·시간 의존 금지) — 멀티플레이 동기화 안전. - 엔진: Unity 6000.3.12f1 + URP.
- 파이프라인: A(필드) → B(POI/배치) → C(절차적 채움) → D(검증) → E(지형·적용). 진입점:
DungeonProfile.GenerateFields()/GenerateLayout()/Generate(sceneRoot).