812노드 스킬트리를 능동적으로 파며 검을 키우고, 마왕을 소환·처치해 엔딩을 보는 방치형 액션 게임. Unity 6 · C# · Windows
A voxel idle-action game where you dig through an 812-node procedurally generated skill tree to grow your sword and summon the demon lord. Scene, materials, UI, and sound are all generated in code.
- 스킬트리 812노드를 손배치하지 않고 절차 생성한다. 시드 고정 난수 + 날개별 규칙(
Core.RULES·GenSeq)으로 종류 배분·수치 스케일·키스톤 배치를 자동 결정한다. 트리 재편 시엔 세이브 마이그레이션까지 처리한다. - 씬·머티리얼·UI·사운드가 전부 코드 생성이다. 오디오 에셋 0개 — SFX 14종과 BGM을 런타임에 절차 합성한다. 프리팹도 없다. 유일한 외부 에셋은 Blender로 만든 복셀 FBX 15종.
- 밸런스를 헤드리스 시뮬레이터로 튜닝했다.
balsim이Core.cs를 그대로 링크해 게임 로직을 동일 재현한다. 비용 곡선은 지수라 Mul ±0.01에 완주 시간이 2~3배 달라져, 눈대중 조정이 불가능하다.
- 전투 (기본 10초, 최대 30초) — 10×10 보드에 몬스터 스폰. 마우스 포인터를 올리면 본체 검이 근처 적을 광역으로 벤다(능동 조작). 분신 검은 무작위 적에게 자동 강하. 처치 5(단축 시 3)마리당 층 상승, 10층 배수 보스.
- 노드 스크린 — 정산 + 격자 스킬트리.
다음 전투버튼을 눌러야 진행(자동 시작 없음).
방치형이지만 전투·진행 모두 능동이다(오프라인/방치 보상 없음).
10층 밴드마다 하늘·안개·조명·지면색과 BGM이 부드럽게 전환된다(지형 지오메트리는 동일).
| 1~10층 초원 | 21~30층 달밤 | 31~40층 설원 | 41~50층 화산 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- 코인 흡수 — 처치마다 코인이 튀었다가 골드 카운터로 빨려 들어간다(일반 3·보스 10·황금 16, 도착 시 카운터 펄스+틱음)
- 카메라 셰이크 + 히트스톱 — 슬램·보스/황금 처치·전멸기·마왕 연출에서 화면이 흔들리고 순간 멈칫한다 (히트스톱은 timeScale 0.07을 unscaled 타이머로 복원 — ESC 일시정지와 충돌하지 않게 가드)
- 킬 스트릭 피치 — 1.5초 안에 연속 처치하면 킬 사운드 음이 점점 올라간다(최대 +45%)
- 잭팟 크리 — 본체 검 크리티컬의 10%가 슈퍼크리(피해 ×2 추가). 화면 플래시+주황 왕큰 팝업+전용 사운드. 분신은 제외(플래시 스팸 방지), 허공 스윙엔 연출 없음
- 황금 몬스터 — 비보스 스폰의 1.3%. 금빛 발광+반짝 파티클, 골드 ×10, 처치 시 잭팟 아르페지오+골드 러시
- 골드 러시 — 황금 몬스터 처치 or 콤보 만땅 도달 시 6초간 골드 ×2 + 스폰 가속(0.45×). 금빛 화면 펄스 오버레이 + 팡파레 + BGM 차임 가속. 지속 중 재발동 시 시간 연장
스킬 날개 끝에서 해금되는 주기 발동 노드들. 예고 링으로 착탄 지점을 먼저 알린 뒤 터진다.
| 운석 소환 (낙하 중) | 검풍 회오리 (보드 횡단) |
|---|---|
![]() |
![]() |
- 4방향 날개 각 200노드(스킬 날개만 발동형 3종이 끝에 붙어 203) — 공격(위·빨강) / 스킬(오른쪽·보라) /
분신(왼쪽·청록) / 골드(아래·노랑). 손배열이 아니라 절차 생성(
Core.RULES+GenSeq): 날개별 종류 배분·수치 스케일·키스톤(10마다) 규칙으로 자동 생성. - 마왕 축 9노드 — 4날개와 겹치지 않는 우하단 대각에 봉인 노드 8 + 마왕 소환 1. 입구는 4날개를 각 150개 이상
사야 열린다. 봉인 비용은 공격 날개 곡선의 idx 150+3i에 앵커(해금 시점 경제 기준 "마지막 파밍" 관문 —
시뮬 기준 축 공개 7.6h → 엔딩 8.3h). 고정값이면 해금 즉시 다 사져서 관문 느낌이 없다.
마왕 소환 노드 구매 시 즉시 최종 결전(진행도 페이즈 포효·HP바 백열 변화) → 무조건 처치(슬로모션+화이트아웃
후 엔딩 화면, 통계에 여정 시간 포함) → 계속 플레이(세이브
cleared). - 모든 노드 1회 구매, 구매한 노드와 인접한 노드만 공개. 노드 클릭=구매 · 드래그=이동 · 휠=확대/축소.
572/812 노드 구매 상태. 4날개가 각 사분면을 채우고, 우하단 대각으로 마왕 축이 뻗는다. 키스톤(10마다)은 후광과 금별 배지로 강조된다.
- 검 진화(강철→사파이어→자수정→황금→진홍→프리즘)는 공격력 노드+공격 키스톤 구매 수 0/10/23/40/60/81로 결정.
- 체감 키스톤 4종(화면이 눈에 띄게 바뀌는 강함): 연쇄 번개(처치 시 근처 적에 번개)·검기 폭발(주기적 화면 전체 베기)·연격 콤보(연속 처치 시 피해 배수 스택)·분신 폭증(분신+5). 키스톤 슬롯에 배치.
- 체감 일반 노드 3종(v3, 풀에서 뽑히는 레벨 스택형): 처형(공격 날개 — HP 처형선(5%+2%p/lv, 상한 30%) 이하 적 즉살)·운석 소환(스킬 날개 — 주기 낙하 광역)·검풍 회오리(분신 날개 — 보드를 휩쓰는 이동 장판).
- 주의 — 트리 배치는 시드 고정 난수 생성 —
Core.cs의 시드/생성 알고리즘·종류 풀을 바꾸면 기존 세이브의 노드 구성이 뒤섞인다. 그래서 v3(풀 개편)에서 SAVE_VER를 올리고 구 트리는 현행 가격 전액 환급 + 초기화로 마이그레이션했다(비용은 wing+idx로만 결정되므로 정확 환급 가능). 골드·기록·클리어는 유지.
검 모델은 FBX에 색을 굽지 않고 런타임에 조립한다. Voxel.Retint가 파트 이름 규칙(p_<역할>_*)을 읽어
역할별로 머티리얼을 입히고, 티어는 날·칼날빛·가드·보석·발광·길이를 바꾼다. 강화 레벨은 그 위에 장식을 누적한다
(Lv2/5/8 가드 스파이크 2→4→6, Lv4 폼멜 날개, Lv7 칼끝 파편 왕관, Lv10 핀, Lv3/6/9 오라 링 1→3).
| 강철 | 사파이어 | 자수정 | 황금 | 진홍 | 프리즘 |
|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
윗줄 강화 Lv0(티어 기본형), 아랫줄 Lv7(가드 스파이크·폼멜 날개·파편 왕관·오라 링 2 누적). 프리즘은 날 색이 무지개로 순환하고, 티어 2 이상은 룬 조각이 검 주위를 돈다.
4날개를 각 150노드 이상 사면 우하단 대각에 봉인 축이 열린다. 봉인 8노드 + 소환 노드를 사면 즉시 결전이 시작되고, 배경이 화산 팔레트로 바뀐다. 진행도 33/66/90%에서 페이즈 포효(셰이크·붉은 플래시·거대 링)가 터지고, HP바는 핏빛에서 백열로 변한다. 처치는 확정 — 1.1초 슬로모션과 화이트아웃 뒤 엔딩 화면으로 넘어간다.
| 강림 | 처치 (슬로모션 + 화이트아웃) |
|---|---|
![]() |
![]() |
balsim(헤드리스 시뮬레이터, Core.cs를 그대로 링크해 로직 동일 재현)으로 튜닝했다.
- 적 HP는 하이브리드 곡선: 30층까지 지수(×1.16), 이후 성장률 점감. 순수 지수는 후반에 DPS가 못 따라가 벽이 생긴다.
- 스낵게임 페이싱 (
balsim snack스윕으로 확정): 비용BaseCost × Mul^idx, Mul≈1.220 (공격/골드 1.220, 스킬 1.224, 분신 1.227). 마왕 축 해금 요구치 각 날개 150개. 보상 증가율 ×1.08 유지. 지수 곡선이라 Mul 민감도 극심(±0.01이면 완주 2~3배) — 조정은 반드시 시뮬로. - 결과 (full-sim, 자동 최적 플레이 상한 DpsEff=1.0): 엔딩 ~8.3시간(691노드·314층), 완주 ~12.2시간 (809노드·386층·프리즘), 벽 없음 — 실플레이는 포인터 유효율만큼 길어져 대략 엔딩 11시간·완주 17시간 예상. 황금 몬스터·골드 러시 수입과 v3 신규 노드(처형 유효HP -30% 등) 기여를 시뮬에 반영한 수치. 티어 필요치는 전노드 82개 기준(사파이어10/자수정23/황금40/진홍60/프리즘81). ※ 페이싱 이력: 초기 문서의 "완주 31시간"은 외삽 추정 오류(실측 97h). 스낵게임 방향 확정 후 현재 값으로 인하. ※ 위 시뮬 수치의 노드 수(691·809)는 해당 시뮬 실행 시점 기준 — 현재 트리는 812노드다(v4에서 발동형 3종 추가).
- 황금 몬스터(×10, 1.3%)·골드 러시(×2, 6초, 스폰 가속)는 balsim
SimBattle에 반영됨 (plain인자로 끄고 비교).
Assets/Scripts/Core.cs— 세이브, 스킬트리 절차 생성(KINDS/RULES/GenSeq/WINGS + 마왕 축), 효과 집계(E), 스탯, 티어Assets/Scripts/Game.cs— 메인 루프: 카메라/배경/보드 생성, 전투 상태머신, 검 4모션, 적 4종, 체감 이펙트, 마왕 결전Assets/Scripts/GameUI.cs— 런타임 UGUI/TMP(하단 패널·정산·토스트·데미지 팝업·콤보 카운터·마왕 HP바·엔딩 화면). 한글 폰트는 OS 폰트에서 런타임 생성(맑은 고딕 우선, 굴림·바탕·Arial 순 폴백)Assets/Scripts/TreeBoard.cs— 스킬트리 보드(패닝·줌·구매·공개 로직)Assets/Scripts/Voxel.cs,Agents.cs— 복셀/모델 헬퍼(Spawn·Retint·Cleanup), 검/적/파티클/번개 상태 클래스Assets/Scripts/Sfx.cs— 절차 합성 사운드(오디오 에셋 없음). SFX 14종 + BGM(바람 노이즈, 층 테마별 코드 패드 크로스페이드, 5음계 차임). 볼륨은 하단 사운드 버튼 또는 M 키로 100→60→30→음소거 순환, 세이브에 저장Assets/Resources/Models/*.fbx— Blender 스크립트로 제작한 HD 복셀 모델 15종(검·룬·뿔·적 4종·나무 2·바위 3·구름·돌·타일). 파트 이름 규칙p_<역할>_*—Voxel.Retint가 역할(body/dark/eye/blade/edge/guard/gem/grip/leaf/trunk/visor/cream 등)별로 런타임 머티리얼을 입힌다(층별 색·티어 진화·발광이 전부 여기서 결정되므로 FBX에 색을 구울 필요 없음). 재생성:Blender/swordidle_models.py를 Blender(MCP)에서import swordidle_models; swordidle_models.build_all().Assets/Editor/ProjectSetup.cs— CLI 셋업(씬·Resources 머티리얼·Always Included 셰이더·아이콘)과 빌드- 주의 —
Resources/std·ghost·unlit·add.mat은 셰이더 스트리핑 방지용 — 지우면 빌드에서 분홍 렌더링 난다."GUI/Text Shader"는 에디터 리소스라 Always Included에 넣으면 빌드가 깨진다(이미 겪음)
- M 키 또는 하단 사운드 버튼: 볼륨 100→60→30→음소거 순환 (세이브)
- ESC: 일시정지 메뉴(계속·볼륨·저장 후 종료). 게임 시간 정지(timeScale=0)
- 첫 플레이엔 조작 힌트 표시(첫 처치 시 사라짐), 첫 정산 화면엔 노드 구매 안내 토스트
- 창이 비활성이면 10fps로 낮춰 CPU/GPU 절약(게임 로직은 계속 진행)
- 앱 아이콘:
Assets/icon.png(Blender 렌더).ProjectSetup.Build가 매 빌드 시 자동 등록
- 세이브:
%USERPROFILE%\AppData\LocalLow\SwordIdle\검 키우기\save.json(10초마다 + 종료 시)- 원자적 저장(tmp→교체) +
save.json.bak백업 + 본 파일 파손 시 백업 자동 복구,v버전 필드로 마이그레이션 대비 - SAVE_VER=4. v1: 러프 환급 / v2·v3: 트리 재편이라 현행 가격 전액 환급 + 트리 초기화 (로드 시 토스트 안내)
- 초기화 시
save.json·.bak·.tmp를 모두 삭제해야 함(백업이 남으면 다음 로드에서 되살아남)
- 원자적 저장(tmp→교체) +
- 디버그 환경변수(전부 세이브 차단):
SWORD_T=초(전투 시간),SWORD_G=골드(double),SWORD_B=N(싼 노드부터 자동 구매),SWORD_F=1(새 세이브),SWORD_W=N(분신 강제),SWORD_MAW=1(마왕 결전 즉시 테스트),SWORD_CAP=폴더(스크린샷 3장 후 종료)
- 에디터: Unity 6000.0.77f1로 프로젝트 열고
Assets/Scenes/Main.unity재생 - 빌드 결과물:
Build\SwordIdle.exe(Win64) - CLI 재빌드:
(씬/머티리얼/설정을 처음부터 다시 만들 때는
Unity.exe -batchmode -quit -projectPath <이 폴더> -executeMethod ProjectSetup.BuildProjectSetup.Setup) - 주의 — 에디터로 프로젝트를 열어둔 채 CLI 빌드하면 실패한다("another Unity instance"). 에디터를 닫거나, 프로젝트를 임시 폴더에 복사해 거기서 빌드할 것.





















