Unity 기반의 레트로 스타일 1인칭 슈터(FPS) 게임 프로젝트입니다.
0MOJEON은 3D 환경에서 2D 스프라이트 적(빌보드)을 상대하는 고전 부머 슈터(Doom 계열) 스타일의 FPS입니다. Rigidbody 기반의 물리 이동(가속/마찰/공중 스트레이핑/공중 대쉬)과 무기 반동, 화면 흔들림 등 감각적인 조작감에 초점을 맞추고 있으며, URP 커스텀 렌더러 기능(픽셀화 + 팔레트 색상 감소)으로 레트로 픽셀 룩을 구현합니다. 아레나 전투, 문/열쇠 잠금, 함정, 픽업 아이템 등을 조합한 스테이지 클리어형 구조를 가집니다.
- 엔진: Unity 2022.3.62f2 (LTS)
- 렌더 파이프라인: Universal Render Pipeline (URP) 14.0.12 + Shader Graph
- 언어: C# (Assembly-CSharp)
- 주요 패키지: AI Navigation (NavMesh) 1.1.7, Post Processing 3.4.0, ProBuilder 5.2.4, TextMesh Pro 3.0.7, Terrain Tools 5.0.6, Timeline 1.7.7
- 입력: Unity 레거시 Input Manager (
Input.GetAxisRaw,KeyCode) - 빌드 타깃: Windows 스탠드얼론 (
BUILD/0MOJEON.exe산출물 존재), 기본 해상도 1024x768, 버전 0.1.0
- 물리 기반 이동: Rigidbody + 가속/마찰 모델, 지상·공중 가속 분리, 경사면 미끄러짐, 벽 슬라이드, 계단 오르기, 이동 플랫폼 속도 상속
- 공중 대쉬(Air Dash): 쿨타임 기반, 이동 방향과 시선 방향을 혼합한 대쉬 벡터
- 모듈화된 카메라 이펙트:
MovementBobbing(이동 흔들림),MouseSway(시점/무기 스웨이),AimPunch(피격 반동),DynamicFovController(속도 기반 FOV),CameraRollController(좌우 이동 롤),PostProcessingController(스프린트 모션 블러 / 피격 색수차) - 표면 인식 사운드:
SurfaceIdentifier및 Terrain 스플랫맵을 읽어 지형별 발소리/착지음 재생 - 사망 연출: 카메라 낙하·기울임 코루틴 종료 후
GameManager에 게임오버 통지
- 데이터 주도 무기 시스템:
WeaponData(ScriptableObject)가 실제 공격 로직을AttackDefinition에셋에 위임 —ProjectileAttack,HitscanAttack,MeleeAttack,ChargeAttack - 주 공격 / 보조 공격 분리, 차지 샷(충전 비율에 따른 위력 스케일링), 탄창·재장전, 무기 교체 애니메이션
- 인벤토리:
PlayerInventory+InventoryManager, 마우스 휠 및 숫자키로 무기 전환, 탄종별 소지 탄약 관리,WeaponInstance로 무기별 장탄 상태를 개별 보존 - 반동(Recoil):
RecoilSettings기반 위치/회전 반동 - 투사체: 오브젝트 풀링으로 재사용, 폭발/관통 처리
- 유한 상태 머신:
IState인터페이스 +IdleState/ChaseState/AttackState/RepositionState - 행동 타입(BehaviorType):
Classic(원거리 + 재배치),Stationary(포탑형),MeleeRusher(돌진 근접),Hybrid(거리에 따라 전환) - 감지·추적: NavMesh 이동, 시야 거리/시야각 원뿔 감지, 배회(wander), 리쉬(leash) 거리 초과 시 원위치 복귀, 피격 시 확률적 타겟 전환, 공격 중 좌우 스트레이핑
- 스프라이트 빌보드 그래픽:
EnemyGraphics가 플레이어 기준 상대 각도로 정면/좌/우/후면 스프라이트 세트를 선택하고 상태별 2프레임 애니메이션 재생 - 무게 등급(WeightClass): Light ~ Immovable로 넉백 저항 차등 적용
- 아레나 전투:
ArenaController— 시작 시 문 잠금 + 스포너로 적 소환, 전멸 시 잠금 해제 및onArenaClearedUnityEvent 호출 - 문/열쇠:
Gate(회전/슬라이드 방식),GateLock,GateKey— 카드키 획득으로 잠금 해제 - 픽업: 체력팩, 실드팩, 탄약팩, 무기 픽업, 버프(스피드 등) 파워업
- 환경 오브젝트: 폭발 배럴, 이동 플랫폼, 함정(장판 데미지, 빙판, 슬라임 감속)
- 스테이지 클리어:
StageClearObject가 상호작용(Interact) 또는 지점 도달(Reach) 조건으로 클리어 처리
GameManager: Playing / Paused / GameOver / LevelCleared / GameCleared 상태 관리, 타임스케일·커서·씬 전환 제어 (싱글톤 + DontDestroyOnLoad)Health/IDamageable/DamageInfo: 체력·보호막과 넉백 정보를 담은 통합 데미지 파이프라인StatManager: 스탯 모디파이어(Add/Multiply) 스택 방식 — 이동속도, 데미지, 연사력, 재장전 속도, 추가 점프, 무한탄약, 무적, 은신ObjectPooler: 동적 확장이 가능한 싱글톤 오브젝트 풀EventManager: C# 이벤트 기반으로 시스템 간 결합도 감소AudioManager: World / UI / Music 채널 분리, AudioMixer 연동, 풀링 사운드 플레이어UIManager: HUD(체력·탄약·캐릭터 얼굴), 일시정지/게임오버/클리어 패널, 임시 메시지SceneLoader: 비동기 로딩 + 페이드 전환 및 로딩 화면CombatFeedbackManager: 타격/피격/처치 시 시청각 피드백PlayerInputManager: 모든 입력을 프로퍼티로 중앙화
PixelizeFeature/PixelizePass: URP ScriptableRendererFeature 기반 화면 픽셀화PaletteFeature/PalettePass: 휘도 양자화·디더링 등으로 색상 수를 줄이는 레트로 팔레트 후처리SmoothPixelCamera,Billboard,BreathingEffect등 렌더링 보조 유틸리티
VehicleController/IVehicle: WheelCollider 기반의 탑승 가능 차량 (실험적)
0MOJEON/
├── Assets/
│ ├── Data/ # 프리팹 및 ScriptableObject 에셋 (Player, Enemy, Weapon, Projectile, Drop, Managers)
│ ├── Image/ # 스프라이트 (무기, 적 로봇, 드롭 아이템, UI)
│ ├── Import/ # 외부 에셋 (파티클 이펙트, URP 픽셀화 셰이더)
│ ├── Model/ # 3D 모델
│ ├── Render/ # 커스텀 URP 렌더러 기능(Palette), 머티리얼, 셰이더
│ ├── Scenes/ # StartScene(메인 메뉴), Stage1(메인 스테이지), SampleScene, MakeScene
│ ├── Script/
│ │ ├── Core/ # Health, IDamageable, SurfaceIdentifier 등 공통 컴포넌트/인터페이스
│ │ ├── Enemy/ # EnemyController, EnemyGraphics, StateMachine(Idle/Chase/Attack/Reposition)
│ │ ├── Event/ # EventTrigger
│ │ ├── Interactables/ # Base / Gate / Pickups / Traps / Environment
│ │ ├── Manager/ # GameManager, UIManager, AudioManager, ObjectPooler, ArenaController 등
│ │ ├── Player/ # PlayerController, WeaponController, Inventory, Camera 이펙트 모듈
│ │ ├── ScriptableObjects/ # WeaponData, EnemyData, ProjectileData, BuffData, AttackDefinition 계열
│ │ ├── Utilities/ # Billboard, AutoReturnToPool, SmoothPixelCamera, FrameCounter
│ │ ├── Vehicle/ # VehicleController
│ │ └── Weapon/ # Projectile
│ ├── Settings/ # URP 렌더 파이프라인 에셋
│ ├── Sound/ # 오디오 클립 및 믹서
│ └── Terrain/ # 터레인 데이터
├── BUILD/ # 빌드 산출물 (0MOJEON.exe)
├── Packages/ # UPM 패키지 매니페스트
├── ProjectSettings/ # Unity 프로젝트 설정
└── 0MOJEON.sln # Visual Studio 솔루션
- Unity Hub에서 Unity 2022.3.62f2 를 설치합니다.
- Unity Hub →
Add로 이 프로젝트 폴더를 추가하고 엽니다. Assets/Scenes/StartScene.unity(메인 메뉴) 또는Assets/Scenes/Stage1.unity(메인 스테이지)를 열고 Play 버튼을 누릅니다.
File > Build Settings의 씬 목록에는StartScene,Stage1이 활성화되어 있습니다 (SampleScene은 비활성).- 플랫폼을 Windows(Standalone)로 두고 Build를 실행합니다.
BUILD/0MOJEON.exe를 직접 실행하면 기존 빌드를 바로 플레이할 수 있습니다.
| 입력 | 동작 |
|---|---|
| WASD | 이동 |
| 마우스 | 시점 |
| 좌클릭 / 우클릭 | 주 공격 / 보조 공격 (충전 무기는 홀드 후 릴리즈) |
| Shift | 스프린트 |
| Space | 점프 / (공중에서) 대쉬 |
| R | 재장전 |
| E | 상호작용 |
| 마우스 휠, 숫자키 | 무기 교체 |
| ESC | 일시정지 |
- Git 히스토리는
Initial commit단일 커밋으로, 기존 개발 결과물이 한 번에 커밋된 상태입니다. - 플레이어 이동/전투, 적 AI 상태 머신, 무기·인벤토리, 아레나·문·픽업·함정, UI/오디오/씬 전환까지 핵심 게임플레이 루프가 구현되어 있으며 Windows 빌드 산출물이 존재합니다.
- 플레이 가능한 실제 스테이지는
Stage11개이며, 프로젝트 버전은0.1.0입니다. - 차량(
VehicleController) 시스템은 일부 주석 인코딩이 깨져 있는 등 실험적/미완성 단계로 보입니다. - 코드 전반에 한국어 XML 문서 주석이 상세히 작성되어 있어 유지보수성이 높은 편입니다.