๋ง๋ฒ ๋ฌธ์์ ์ง์ ๊ทธ๋ ค ์ฃผ๋ฌธ์ ์์ ํ๋ ๊ฒ์ ๊ฒฝํ์ ๊ฒ์ฆํ๊ธฐ ์ํ ํ๋ก์ ํธ์ ๋๋ค.
ํ์ฌ ์ ์ฅ์๋ Web ๊ธฐ๋ฐ Magic Recognizer V1.5 ์ฐ๊ตฌ ํ๋กํ ํ์
๊ณผ Unity ๊ธฐ๋ฐ Magic Exam Hall ํ๋ ์ด์ด๋ธ์ ํจ๊ป ์ ์งํฉ๋๋ค. Magic Exam Hall์ ๋ณ๋ ์
๋ ฅ์ฐฝ์ด ์๋๋ผ ๋งต ์ ๋ฐ๋ฅ์ ์ง์ ๋ฌธ์์ ๊ทธ๋ฆฌ๊ณ , base family์ overlay operator๋ฅผ ์กฐํฉํด ์ธ๊ณ ์ํ๋ฅผ ๋ฐ๊พธ๋ 2D top-down ๋ง๋ฒ ๋๋ก์ ํผ์ฆ ์ด๋๋ฒค์ฒ์
๋๋ค.
ํ์ฌ ๋ฒ์:
- ์น ์บ๋ฒ์ค ๊ธฐ๋ฐ recognizer ์ฐ๊ตฌ ํ๋กํ ํ์
- ๊ธฐ๋ณธ 5๋ฌธ์ base family ์ธ์
- user input profile ๋์
- raw quality / adjusted quality ๋ถ๋ฆฌ
- base seal ์ดํ overlay operator stack ์ธ์
final sealcompile ๊ฒฐ๊ณผ ํ์- JSON ๋ก๊ทธ export
- ๋ฌธ์ ์ํ ๋๊ธฐํ ๊ฒ์ฆ
Magic Exam Hall๊ฒ์ ๊ธฐํ/๋ก๋๋งต ๋ฌธ์ํ- Unity ๊ธฐ๋ฐ
Magic Exam Hall5์ธต ์๋ ์บ์คํ ํ๋ ์ด ๋ฃจํ - Unity ํ์ดํ, ๋ฉ์ธ ๋ฉ๋ด, ์ต์ , ์ผ์์ ์ง, codex, ์๋ฉ ๋ณต๊ท ํ๋ฆ
- Unity 3์ฌ๋กฏ ์ ์ฅ, ์ธต ์๋ฃ ์๋ ์ ์ฅ, codex ์๋ ์ ์ฅ
- ์ ์ฐจ ์์ฑ SFX 12์ข , BGM 2์ข , ์ ์ธ์/์คํจ ๋น์ฃผ์ผ ํผ๋๋ฐฑ
- ์ ๊ทผ์ฑ ์ต์ : ์ข/์ฐํด๋ฆญ ์ค์, ์ด๋ ํค ํ๋ฆฌ์ , ๋ง์ฐ์ค ๊ฐ๋, ํ ์คํธ ํฌ๊ธฐ, ์ ๋ณด์กฐ, ๊ด์ฐฐ ๋ชจ๋
์น ํ๋กํ ํ์ :
- Node.js
20.x์ด์ - npm
10.x์ด์
ํ์ธ:
node -v
npm -vUnity ํ๋ ์ด์ด๋ธ:
- Unity
6000.3.14f1 - ์ ํจํ Unity Editor ๋ผ์ด์ ์ค
์ฒ์ clone ํ ๊ฐ์ฅ ๋จผ์ ํ ์ผ:
git clone <repo-url>
cd magic
npm ci๊ฐ๋ฐ ์๋ฒ ์คํ:
npm run devVite๊ฐ ์ถ๋ ฅํ๋ ๋ก์ปฌ ์ฃผ์๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ์ด๋ฉด ๋ฉ๋๋ค. ๋ณดํต์ http://localhost:5173 ์
๋๋ค.
Unity ํ๋ ์ด์ด๋ธ ์คํ:
unity/MagicExamHall
- Unity Hub ๋๋ Unity Editor์์ ์ ํ๋ก์ ํธ ํด๋๋ฅผ ์ฝ๋๋ค.
Assets/Scenes/MagicExamHall.unity๋ฅผ ์ฝ๋๋ค.- Play๋ฅผ ๋๋ฆ ๋๋ค.
์กฐ์์ WASD/๋ฐฉํฅํค ์ด๋, ์ฐํด๋ฆญ hold/release ์๋ ๋๋ก์์
๋๋ค. ์ต์
์์ ๋ฐฉํฅํค/IJKL ์ด๋, ์ขํด๋ฆญ ๋๋ก์, ํ
์คํธ ํฌ๊ธฐ, ์ ๋ณด์กฐ, ๊ด์ฐฐ ๋ชจ๋, BGM/SFX ๋ณผ๋ฅจ์ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ํ๋ ์ด์์๋ ๋ณ๋ ์
๋ ฅ ํจ๋์ด๋ ๋ง๋ฒ ์์ ๋ฒํผ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
์ ์ถ ํ๋ณด๋ฅผ ๋ง๋ค ๋๋ Release Checklist๋ฅผ ๋ฐ๋ผ Web ๊ฒ์ฆ, Unity ํ ์คํธ, Windows ๋น๋, player smoke, ์๋ 5์ธต ์์ฃผ, ๋ก๊ทธ/๊ฐ์ธ์ ๋ณด ํ์ธ์ ํจ๊ป ์ ๊ฒํฉ๋๋ค.
์ฒ์ ๋ฐ์์ ๋๋ ์๋ ์์๋ก ํ์ธํ๋ฉด ๋ฉ๋๋ค.
ํ์ task frontmatter๊ฐ ๋ง๋์ง ํ์ธํฉ๋๋ค.
npm run validate:docs๊ธฐ๋ ๊ฒฐ๊ณผ:
validated 0 task documents against work queuerecognizer ์ฝ์ด์ ๊ธฐ๋ณธ family ์ธ์, ๊ฑฐ๋ถ ์ผ์ด์ค, ํ์ง ๋ฒกํฐ ๋์์ ํ์ธํฉ๋๋ค.
npm testwatch ๋ชจ๋๊ฐ ํ์ํ๋ฉด:
npm run test:watchTypeScript ํ์ ๊ฒ์ฌ์ Vite ๋ฒ๋ค๋ง์ ํจ๊ป ํ์ธํฉ๋๋ค.
npm run build์ ์ ์ข
๋ฃ ์ dist/๊ฐ ์์ฑ๋ฉ๋๋ค.
ํ์ฌ Web UI์๋ ๋ ์ธต์ด ํจ๊ป ๋ค์ด ์์ต๋๋ค.
- core recognizer ๊ธฐ๋ฅ:
- base family ์ธ์
- overlay operator stack ์ธ์
- raw / adjusted quality ๊ณ์ฐ
- final seal compile
- HCI ๊ฒํ ์ฉ demo ๊ธฐ๋ฅ:
quality vector useon/off compareclean / explain / workshopํ๋ฆฌ์ - why panel
- guided scenario
- recent seals / quick compare
๊ฐ๋ฐ ์๋ฒ๋ฅผ ๋์ด ๋ค ๋ธ๋ผ์ฐ์ ์์ ์๋ ์์๋ก ํ์ธํฉ๋๋ค.
- ์๋จ
View Preset์์clean์ ๋จผ์ ํ์ธํฉ๋๋ค. Guided Demo Scenario์์๋น ๋ฅธ ๋ถ๊ฝ๋๋๋๋ฆฐ ๋ถ๊ฝ์ ์ ํํฉ๋๋ค.- ์บ๋ฒ์ค์ ๊ธฐ๋ณธ ๋ฌธ์์ ๊ทธ๋ฆฌ๊ณ
Seal Base๋ฅผ ๋๋ฌ base family๋ฅผ ๊ณ ์ ํฉ๋๋ค. - ์ค๋ฅธ์ชฝ
Outcome Compare์์quality off / quality on์ ๋น๊ตํฉ๋๋ค. explainํ๋ฆฌ์ ์ผ๋ก ๋ฐ๊ฟ why panel๊ณผ quick compare๋ฅผ ํจ๊ป ํ์ธํฉ๋๋ค.- ํ์ํ๋ฉด
workshopํ๋ฆฌ์ ์ผ๋ก ๋ฐ๊ฟ analysis overlay์ detail panel์ ์ฝ๋๋ค. Start Overlay์ดํ ๊ฐ์ ์บ๋ฒ์ค์์ overlay operator๋ฅผ ๋ง๊ทธ๋ฆฐ ๋คSeal Final๋ก compile ๊ฒฐ๊ณผ๋ฅผ ํ์ธํฉ๋๋ค.
์์ฐ ์ค ์๋ ๋ฌธ๊ตฌ์ ์นด๋๊ฐ ๋ฐ๋ก ๋ณด์ฌ์ผ ํฉ๋๋ค.
same shape, same familyquality affects execution, not familyquality off๋ canonical baseline outcome๋ง ๋ณด์ฌ ์คquality on์ quality vector ๊ธฐ๋ฐ outcome delta๋ง ๋ฐ์- why panel์ ์ํ ์ด์ ์ quality ์ํฅ ์ค๋ช ์ ์งง์ ๋ฌธ์ฅ์ผ๋ก ์ ๊ณต
- quick compare๋ ํ์ฌ ์๋์ ์ง์ ๊ฒฐ๊ณผ๋ฅผ ๋ก๊ทธ ์์ด ๋น๊ต ๊ฐ๋ฅํ๊ฒ ์ ๊ณต
ํ๋ฆฌ์ :
clean: ์ค๋ช /๋ถ์์ ์ค์ด๊ณ draw์ ํต์ฌ ๊ฒฐ๊ณผ ์์ฃผ๋ก ๋ดexplain: why panel๊ณผ quality compare ์ค์ฌ์ผ๋ก ๋ดworkshop: analysis overlay์ ์ธ๋ถ ํจ๋๊น์ง ํจ๊ป ๋ด
๊ฐ๋ณ ํ ๊ธ:
quality vector use: outcome layer์ quality delta๋ฅผ ๋ฐ์ํ ์ง ์ ์ดquality compare: quality off / on compare card ํ์why panel: ๊ฒฐ๊ณผ ์ด์ ์ค๋ช ํจ๋ ํ์analysis overlay: axis, closure, anchor zone, ghost guide ํ์detail panels: raw / adjusted quality, profile, ๋ก๊ทธ ๊ฐ์ ์ธ๋ถ ํจ๋ ํ์
๋ฒํผ ์ค๋ช :
Seal Base: ํ์ฌ base ์ ๋ ฅ์ canonical family๋ก ํ์ Start Overlay: base seal ์ดํ overlay ์ ๋ ฅ ๋จ๊ณ๋ฅผ ์์Seal Final: base family์ overlay stack์ compile ๊ฒฐ๊ณผ๋ก ๊ณ ์ Undo: ๋ง์ง๋ง stroke ์ ๊ฑฐReset: ํ์ฌ ์ ๋ ฅ ์ด๊ธฐํExport Logs: ๋์ recognition ๋ก๊ทธ๋ฅผ JSON์ผ๋ก ์ ์ฅ
๋ธ๋ผ์ฐ์ ์์ ๋น ๋ฅด๊ฒ ํ์ธํ ์ต์ ์๋๋ฆฌ์ค:
๋น ๋ฅธ ๋ถ๊ฝ์๋๋ฆฌ์ค๋ฅผ ์ ํclean์์ ๋ถ๊ฝ ์ผ๊ฐํ์ ๊ทธ๋ฆผSeal Basequality vector useon/off๋ฅผ ๋ฐ๊พธ๋ฉฐOutcome Compareํ์ธexplain์ผ๋ก ์ ํํด why panel ํ์ธStart Overlaysteel_brace,ice_bar,void_cut์ค ํ๋๋ฅผ ๋ง๊ทธ๋ฆผSeal Finalquick compare์์ ํ์ฌ์ ์ง์ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ต
ํ์ฌ recognizer์ canonical silhouette๋ family๋ง๋ค 1๊ฐ๋ง ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ๋:
3๊ฐ ํํ ๊ฐ๋ฐฉ์ - ๋
:
ํ๋ณ์ด ๋ ๊ธด ํํฉ ์ฌ๋ค๋ฆฌ๊ผด - ๋ถ๊ฝ:
์ํฅ ์ธ์์ ํํฉ ์ผ๊ฐํ - ๋ฌผ:
๋จ์ผ ์ํ ํํฉ ๋ฃจํ - ์๋ช
:
์ค๊ธฐ + ์๋จ ๋ถ๊ธฐ rooted Y
Overlay operator:
steel_braceelectric_forkice_barsoul_dotvoid_cutmartial_axis(void_cut์ดํ์๋ง ํ์ฑํ)
์ฃผ์:
- base family ํ์ ์ profile์ด ๊ฐ์ ธ๊ฐ์ง ์์ต๋๋ค.
- overlay๋ base seal ์ดํ์๋ง ํด์ํฉ๋๋ค.
- base stroke๋ overlay phase์์ ghost overlay๋ก๋ง ๋ณด์กฐํฉ๋๋ค.
npm run dev # ๊ฐ๋ฐ ์๋ฒ
npm run build # ํ์
๊ฒ์ฌ + ํ๋ก๋์
๋น๋
npm test # Vitest ์ผ๊ด ์คํ
npm run test:watch # Vitest watch
npm run validate:docs # docs ์ํ/์์กด์ฑ ๊ฒ์ฆUnity ๊ฒ์ฆ ๋ช ๋ น ์์:
& 'C:\Program Files\Unity\Hub\Editor\6000.3.14f1\Editor\Unity.com' -batchmode -quit -projectPath 'C:\Users\silve\source\repos\magic\unity\MagicExamHall' -executeMethod MagicExamHall.Editor.MagicExamHallSceneBuilder.BuildAll
& 'C:\Program Files\Unity\Hub\Editor\6000.3.14f1\Editor\Unity.com' -batchmode -projectPath 'C:\Users\silve\source\repos\magic\unity\MagicExamHall' -runTests -testPlatform editmode -testResults 'C:\Users\silve\source\repos\magic\unity\MagicExamHall\TestResults.xml'
& 'C:\Program Files\Unity\Hub\Editor\6000.3.14f1\Editor\Unity.com' -batchmode -projectPath 'C:\Users\silve\source\repos\magic\unity\MagicExamHall' -runTests -testPlatform playmode -testResults 'C:\Users\silve\source\repos\magic\unity\MagicExamHall\PlayModeTestResults.xml'
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\build-windows.ps1 -BuildPath 'tmp\MagicExamHallFinalize\MagicExamHall.exe' -LogPath 'unity\MagicExamHall\unity-build-finalize.log'
powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\smoke-magic-exam-hall-player.ps1 -BuildPath 'tmp\MagicExamHallFinalize\MagicExamHall.exe' -LogPath 'tmp\MagicExamHallFinalize\player-smoke.log'src/ ์น ๋ฐ๋ชจ์ recognizer ์ฝ์ด
tests/ Vitest ํ
์คํธ
scripts/ ๋ฌธ์ ๊ฒ์ฆ ์คํฌ๋ฆฝํธ
docs/ ๋ฐฉํฅ/ํ/task ๋ฌธ์
unity/ Unity Magic Exam Hall ํ๋ ์ด์ด๋ธ
๋ฌธ์ ๊ธฐ์ค์ ๋จผ์ ๋ณด๊ณ ์ถ๋ค๋ฉด ์๋ ์์๊ฐ ๊ฐ์ฅ ๋น ๋ฆ ๋๋ค.
docs/GAME_DESIGN.mddocs/ARCHITECTURE_LAYERS.mddocs/INPUT_LAYER_HANDOFF.md(player input and recognition handoff)docs/RECOGNITION_CONTRACT.mddocs/TEAM_DEVELOPMENT_PLAN.mddocs/PROJECT_ROADMAP.mddocs/PROJECT_OVERVIEW.mddocs/20_queue/work-queue.mddocs/30_tasks/README.md
vitest: not found ๊ฐ ๋จ๋ฉด ์์กด์ฑ์ด ์ค์น๋์ง ์์ ์ํ์
๋๋ค.
npm ci๋ฌธ์ ๊ฒ์ฆ์ด ์คํจํ๋ฉด work-queue.md์ task ๋ฌธ์์ frontmatter ์ํ/์์กด์ฑ์ด ์ด๊ธ๋ ๊ฒ์
๋๋ค. ํ์ฌ main ๊ธฐ์ค task ๋ฌธ์๋ ์์ง ์์ผ๋ฏ๋ก ์ ์ ๊ฒฐ๊ณผ๋ validated 0 task documents against work queue์
๋๋ค. ๋จผ์ ์๋๋ฅผ ๋ค์ ์คํํด ์์ธ์ ํ์ธํฉ๋๋ค.
npm run validate:docsUnity batchmode์์ ์๋ ๋ฉ์์ง๊ฐ ๋ณด์ด๋ฉด ์ฝ๋ ์ปดํ์ผ ์คํจ๊ฐ ์๋๋ผ ๋ผ์ด์ ์ค ์ด๊ธฐํ ๋ฌธ์ ์ ๋๋ค.
No valid Unity Editor license found. Please activate your license.
๋ก๊ทธ ๋์ abort_threads: Failed aborting id ... mono_thread_manage will ignore it ๋ฉ์์ง๋ Unity/Mono ์ข
๋ฃ ๊ณผ์ ์์ ๋จ๋ ๋
ธ์ด์ฆ์ผ ์ ์์ต๋๋ค. ๊ฐ์ ๋ก๊ทธ ์์ Exception, CS#### error, Test run failed๊ฐ ํจ๊ป ์๋์ง ๋จผ์ ํ์ธํ์ธ์.