Public
Watch 1
Fork 0
You've already forked unity-web
2026-10-30 01:34:14 +09:00

unity-web

unity-web은 이미 출시된 Unity 게임(Windows standalone build)을 원본 파일 그대로 브라우저에서 실행하고, 부팅·로딩과 실행 성능을 native에 가깝게 만드는 것을 목표로 하는 개인 연구 프로젝트다.

현재 상태

U1(첫 Unity 샘플)의 원본 launcher·UnityPlayer.dll·Mono를 x64 → wasm으로 번역하고 Win32·window·D3D11 shim 위에서 실행해, host의 Chrome·Edge page canvas에 WebGPU로 그린 첫 frame을 냈다(데모 D1 PASS, 2026-11-01). 기본 guest 주소 공간은 memory64이고 U1은 Node와 브라우저에서 title 화면까지 간다. title 뒤 계속 도는 실행, 입력, 오디오, 브라우저 안 번역은 아직이다. 번역 module과 shader는 지금 offline에서 만든다.

프로젝트는 2026-11-01부터 멈춰 있다. 검증된 사실과 미실행 범위는 프로젝트 상태, 남은 일은 남은 작업이 소유한다.

선택한 방향

2026-10-30 사용자와 정한 방향이며 세부와 근거는 아키텍처와 조사 결과에 있다.

  • 게임별 자동 변환기 없이 "파일만 주면 브라우저에서 부팅"을 목표로 한다.
  • 원본 Windows Unity player(UnityPlayer.dll)를 x64 → wasm 번역해 브라우저 안에서 실행한다. Proton/Wine + DXVK + box64의 브라우저 대응물이다.
  • Win32(OS 경계. Baselib 계층 가로채기는 D1 뒤 선택지, shim/baselib)·D3D11 → WebGPU·WASAPI → AudioWorklet·입력을 shim으로 대체하고, C#은 원본 Managed/*.dll을 그대로 실행한다. C# runtime은 출시된 Mono runtime 번역(ii)과 Unity Mono fork wasm build(i)를 모두 계속한다. D1 통합에는 (ii)를 쓰고 최종 선택은 미룬다(2026-10-31, 남은 작업).
  • guest 주소 공간은 wasm32와 memory64 두 길을 함께 가고 wasm32 여유가 모자라면 memory64로 옮긴다(2026-11-01). 조건이 충족되어 player 기본은 memory64다(확정한 결정).
  • 실행은 브라우저에서 하며 production 서버는 정적 파일만 제공한다. 원본 파일은 업로드 때 한 번 content-addressed Brotli chunk와 manifest로 나눠 immutable 정적 파일로 게시한다(파일 스트리밍).
  • 자매 프로젝트 rgss123-web(RPG Maker VX/VX Ace 브라우저 실행)과 같은 철학이며 host 계약은 가능한 한 맞춘다.

문서

문서 내용
AGENTS.md 사람과 에이전트의 작업 계약
문서 안내 문서 색인과 갱신 규칙
아키텍처 목표 구조와 기각한 대안
조사 결과 출처가 있는 조사 판정과 미해결 질문
샘플 인벤토리 첫 샘플 U1의 정적 관측
개발 환경 host 사실과 개발 container
번역기 설계 번역기 설계와 spike·U1 DLL 번역·동적 tier 결과, C# runtime 비교
UnityPlayer.dll 정적 분석 U1 player의 동적 API·icall·data 형식 관측
남은 작업 D1 판정, 우선순위를 붙인 남은 일, 사용자 결정, 위험
프로젝트 상태 현재 검증된 사실과 NOT RUN 범위

원본 게임 파일은 games/에 로컬로만 두고 커밋하지 않는다. 연구 사용 범위와 법적 경계는 AGENTS.md를 따른다.