Minecraftonia - C#/.NET 기반 복셀 샌드박스 게임
프로젝트 개요
Minecraftonia는 C# 13/.NET 9와 Avalonia를 사용하여 개발 중인 크로스 플랫폼 복셀 샌드박스 게임입니다. 커스텀 복셀 레이 트레이싱, 절차적 지형 생성, 반응형 데스크톱 UI를 실험하는 프로젝트입니다.
핵심 기능
1. 커스텀 복셀 엔진
-
수제 플레이어 물리학: 블록 상호작용과 청크 없는 세계 표현
-
실험 최적화: 튜닝된 게임 플레이 경험
2. 소프트웨어 레이 트레이싱
-
실시간 복셀 레이 마처: WriteableBitmap으로 세계를 렌더링
-
독특한 스타일: GPU 셰이더 없이 구현된 특별한 시각적 효과
3. 절차적 지형 생성
-
레이어드 노이즈: 바이옴 기반 표면 처리
-
나무 배치: 자동화된 식생 시스템
-
지하 동굴: 자동 동굴 생성 시스템
4. Avalonia 기반 UI
-
키보드/마우스 제어: 완전한 포인터 캡처
-
설정 가능한 감도: 반전 설정 지원
-
컴포저블 UI 셸: 메뉴 시스템
5. 저장 및 재개 시스템
-
JSON 저장 파일: 세계 블록, 플레이어 상태, 팔레트 선택 저장
-
세션 간 지속성: 게임 진행 상황 보존
시스템 요구사항
필수 요구사항
-
.NET SDK 9.0 프리뷰 이상 (
dotnet --info
로 확인) -
데스크톱 OS: macOS, Windows, Linux
-
GPU: 360×202 내부 해상도에서 소프트웨어 렌더링 처리 가능한 GPU
권장 개발 환경
-
JetBrains Rider
-
Visual Studio
-
VS Code + Avalonia 확장
설치 및 실행 방법
클론 및 빌드
git clone https://github.com/<your-account>/Minecraftonia.git
cd Minecraftonia
dotnet build Minecraftonia.sln
dotnet run --project Minecraftonia
배포 빌드
로컬 릴리스 배포
# Linux x64
dotnet publish Minecraftonia/Minecraftonia.csproj -c Release -r linux-x64 --self-contained true -o publish/linux-x64
# macOS Apple Silicon
dotnet publish Minecraftonia/Minecraftonia.csproj -c Release -r osx-arm64 --self-contained true -o publish/osx-arm64
# Windows x64
dotnet publish Minecraftonia/Minecraftonia.csproj -c Release -r win-x64 --self-contained true -o publish/win-x64
GitHub Actions 워크플로우
-
트리거: main 브랜치 푸시, PR,
v
접두사 태그 -
빌드 대상: linux-x64, osx-arm64, win-x64
-
자동 릴리스: 태그된 커밋에서 자동 GitHub Release 생성
-
릴리스 생성 방법:
git tag v0.3.0 && git push origin v0.3.0
게임플레이 컨트롤
기본 조작
동작 | 키 | 비고 |
---|---|---|
이동 | W A S D | 화살표 키는 카메라 회전, Q/E는 마우스 없이 요 조정 |
달리기 | Shift | 이동 중 홀드로 속도 증가 |
점프 | Space | 지면 접촉 필요 |
시점 조작 | 마우스 | F1로 포인터 캡처 토글, Esc로 해제 |
블록 파괴 | 좌클릭 | 현재 레이 트레이싱 히트 위치 |
블록 설치 | 우클릭 | 선택된 핫바 블록 설치 |
게임 메뉴 및 설정
동작 | 키 | 설명 |
---|---|---|
일시정지/메뉴 | Esc | 게임 내 메뉴 오버레이 열기 |
X축 반전 | F2 | 독립적 토글 |
Y축 반전 | F3 | 독립적 토글 |
감도 조절 | +/- | 마우스 룩 배율 조정 |
인벤토리 및 아이템
동작 | 키 | 설명 |
---|---|---|
핫바 | 1-7, Tab, 스크롤 휠 | 스크롤로 팔레트 순환 |
프로젝트 구조
Minecraftonia.sln
├── Minecraftonia/ # Avalonia 데스크톱 프론트엔드
├── Minecraftonia.Game/ # 게임 오케스트레이션, 렌더링 브릿지, 저장 시스템
├── Minecraftonia.VoxelEngine/ # 핵심 복셀 세계 데이터 구조 및 물리학
├── Minecraftonia.VoxelRendering/ # 레이 트레이서, 텍스처 아틀라스, 오버레이 헬퍼
└── publish/ # 자체 포함 배포 출력 (선택사항)
아키텍처 및 알고리즘
Minecraftonia (데스크톱 UI 프론트엔드)
-
Avalonia 네비게이션 셸: GameControl 커스텀 컨트롤 호스팅, XAML 메뉴 오버레이
-
포인터 캡처 관리: 원시 마우스 캡처, 윈도우 중앙 포인터 워프, Esc/F1 토글
-
컴포지터 동기화 렌더 루프: TopLevel.RequestAnimationFrame을 통한 시뮬레이션 진행
-
SIMD 인식 프레임 오케스트레이션: System.Numerics.Vector 연산 활용
Minecraftonia.Game
-
MinecraftoniaGame 오케스트레이션: 플레이어 입력, 움직임 통합, 복셀 조작, 저장/로드 조정
-
바이옴 인식 세계 생성: 파도 함수 붕괴 타일 맵으로 8개 바이옴 지원
-
저장 시스템: GameSaveData/PlayerSaveData로 세계 차원, 청크 매개변수, 블록 배열 캡처
-
입력 파이프라인: 키보드/마우스/포인터 이벤트를 GameInputState로 변환
Minecraftonia.VoxelEngine
-
청크 기반 복셀 저장소: VoxelWorld으로 청크 딕셔너리 유지
-
점유 추적: 청크가 고체 블록 수 추적으로 컬링/스트리밍 휴리스틱 제공
-
플레이어 물리학: 평면 위시 방향, 중력, 스프린트, 점프 해결
Minecraftonia.VoxelRendering
-
적응형 레이 마처: 픽셀당 중앙 레이 캐스팅, 색상/알파 분산 시 지터 샘플 추가
-
SIMD 색상 파이프라인 및 FXAA: Vector4 수학으로 모든 색상 블렌딩, 루마 평가, 선명화
-
HUD 오버레이: 십자선, FPS 카운터, 핫바 선택, 블록 윤곽 그리기
데이터 흐름 요약
-
GameControl이 입력(키보드, 마우스, 포인터 델타)을 매 프레임 수집하여 GameInputState로 마샬링하고
_game.Update
호출 -
MinecraftoniaGame이 룩, 움직임, 상호작용을 적용하고 MinecraftoniaVoxelWorld 업데이트
-
VoxelRayTracer가 세계를 WriteableBitmap으로 렌더링하여 GameControl.Render가 Avalonia 표면에 블릿
-
HUD 오버레이가 팔레트 상태, FPS, 십자선, 블록 윤곽을 프레임버퍼 위에 그리기
-
메뉴 액션이 StartNewGame, LoadGame, CreateSaveData 또는 포인터 캡처 토글 호출
저장 파일
저장 위치
-
macOS/Linux:
~/.config/Minecraftonia/Saves/latest.json
-
Windows:
%APPDATA%\Minecraftonia\Saves\latest.json
파일 형식
-
JSON 인코딩: GameSaveData 객체
-
오류 처리: 손상되거나 버전 불일치 파일은 UI에서 명확한 오류 메시지와 함께 거부
개발 가이드
기여 방법
-
포크 및 브랜치: main에서 분기 (예: feature/improve-water)
-
빌드 확인:
dotnet build Minecraftonia.sln
실행 -
문서화: 새 애셋이나 저장 스키마 추가 시 README 문서화
-
PR 생성: 간결한 설명과 스크린샷/비디오 포함
개발 팁
-
범위 제한: 변경사항을 범위 내로 유지
-
테스트: 빌드 성공 확인
-
문서화: 새 기능은 README에 문서화
로드맵
단기 목표
-
다중 저장 슬롯: 저장 미리보기 기능
-
설정 가능한 세계 생성: 시드와 바이옴 레이어 커스터마이징
중기 목표
-
동적 낮/밤 조명: 날씨 시스템
-
접근성 개선: 색맹/고대비 모드
장기 목표
- 멀티플레이어 프로토타입: 네트워크 기능
라이선스 및 크레딧
라이선스
GNU Affero General Public License v3.0
크레딧
-
제작자: Wiesław Šoltés (@wieslawsoltes)
-
엔진 기초: 이 프로젝트를 위해 특별히 제작된 커스텀 복셀 수학, 물리학, 렌더링
-
라이브러리: Avalonia UI, System.Numerics (SIMD), .NET 런타임