🎮 Project_Up – Unity 3D 서바이벌 시스템 제작기
안녕하세요! 오늘은 제가 진행한 Unity 프로젝트 Project_Up을 소개하려고 합니다.
이 프로젝트는 3D 환경에서 플레이어가 이동하고, 오브젝트와 상호작용하며, 자원을 채집하고 아이템을 사용하는 기본적인 서바이벌형 시스템을 구현한 예제입니다.
최근에는 장비(Equip) 시스템을 완전히 제거하고, 소비형 아이템 중심의 단순한 인벤토리 구조로 리팩토링을 진행했어요.
덕분에 전체 구조가 훨씬 가볍고 직관적으로 변했습니다.
📌 프로젝트 개요
- 장르 : 3D 서바이벌 / 인터랙션
- 엔진 : Unity 2021.3 LTS
- 개발 언어 : C#
- 주요 목표
- 캐릭터 이동, 점프, 달리기, 카메라 제어
- 상호작용 가능한 오브젝트와의 간단한 인터페이스
- 소비형 아이템 중심의 인벤토리 시스템
- 환경 오브젝트(점프패드, 이동하는 차량) 구현
🛠 주요 기능
1. 플레이어 시스템
- 이동/점프/달리기
기본 WASD 이동과 점프, Shift를 통한 달리기 기능을 구현했습니다.
카메라는 3인칭 시점이며, 벽이나 오브젝트에 부딪히면 자동으로 충돌 보정이 됩니다. - 스태미나 관리
달릴 때 스태미나가 소모되며, 스태미나가 0이 되면 더 이상 달릴 수 없습니다. - 상태(Condition) 관리
체력, 스태미나, 속도 증가(버프) 상태를 관리하고, UI와 실시간 연동됩니다. - 애니메이션 연동
이동 속도, 점프 여부, 낙하 여부에 따라 애니메이션 파라미터를 업데이트합니다.
2. 아이템 & 인벤토리
- 아이템 타입
- Consumable : 체력 회복, 스태미나 회복, 속도 증가 등 사용 시 효과 적용
- Environment : 환경 오브젝트(자원, 오브젝트 배치용)
- 인벤토리 UI
- 슬롯 기반 UI로 구성
- 같은 종류의 아이템은 스택 가능
- 아이템 사용 시 해당 효과 즉시 적용
- 인벤토리가 가득 차면 아이템을 버림
- 아이템 상호작용
월드에 떨어진 ItemObject와 상호작용하면 인벤토리에 추가됩니다.
3. 상호작용 시스템
- 화면 중앙에서 Raycast를 발사해 상호작용 가능한 오브젝트를 탐지합니다.
- 감지 시 상호작용 안내 UI(TextMeshPro) 표시.
- E 키 입력 시 IInteractable 인터페이스의 OnInteract() 호출.
4. 환경 오브젝트
- JumpPad
플레이어가 올라서면 위로 점프시키고, 애니메이션이 재생됩니다. - Move_SportCar
DoTween을 사용해 차량이 앞뒤로 왕복하거나 원형 궤도를 도는 움직임을 구현했습니다.
이동 방향에 따라 휠이 회전하는 디테일까지 넣었습니다. - Resource
채집 시 아이템 드롭 프리팹을 생성하며, 정해진 수량만큼만 채집 가능합니다.
5. UI & 시각 효과
- UICondition : 체력, 스태미나, 버프 상태 표시.
- DamageIndicator : 피해를 받으면 화면이 붉게 플래시됩니다.
- FootSteps : 이동 속도에 따라 발자국 소리가 재생됩니다.
🆕 최근 리팩토링 포인트
이번 업데이트에서 특히 큰 변화는 장비 시스템 제거입니다.
- 불필요하게 복잡했던 장착/해제 로직과 Equip 클래스 삭제
- 인벤토리에서 장착/해제 버튼 제거
- ItemType에서 Equipable 제거
- 아이템은 Consumable 또는 Environment만 존재
- Player 클래스에서 equip 필드 삭제
이렇게 하니 코드가 훨씬 단순해지고, 아이템 관리와 UI 동작이 명확해졌습니다.
📂 폴더 구조
Assets/
├── 02.Scripts/
│ ├── Character/
│ │ ├── CharacterManager.cs
│ │ ├── Player.cs
│ │ ├── PlayerController.cs
│ │ ├── PlayerCondition.cs
│ │ ├── PlayerAnimation.cs
│ │
│ ├── Interaction/
│ │ ├── Interaction.cs
│ │ ├── ItemObject.cs
│ │ ├── Resource.cs
│ │
│ ├── Inventory/
│ │ ├── ItemData.cs
│ │ ├── ItemSlot.cs
│ │ ├── UIInventory.cs
│ │
│ ├── UI/
│ │ ├── Condition.cs
│ │ ├── UICondition.cs
│ │ ├── DamageIndicator.cs
│ │
│ ├── Environment/
│ │ ├── JumpPad.cs
│ │ ├── Move_SportCar.cs
│ │
│ └── Sound/
│ └── FootSteps.cs
🎥 플레이 화면 (GIF)
💡 마무리
이번 프로젝트는 기본적인 서바이벌형 시스템의 뼈대를 구현하는 것이 목표였습니다.
장비 시스템을 제거하고 나니 인벤토리와 아이템 구조가 훨씬 명확해지고 유지보수가 쉬워졌어요.
다음에 추가하고싶은건 전투 시스템과 퀘스트 시스템을 간단하게 붙여서,
더 풍부한 플레이 경험을 줄 수 있도록 확장하고싶습니다!
'Unity' 카테고리의 다른 글
Unity - 3D Survival Game(인벤토리 기능) (6) | 2025.08.08 |
---|---|
Unity - Inventory 인벤토리 시스템 구현 정리 (3) | 2025.08.07 |
Unity - Unity의 TryGetComponent (1) | 2025.08.07 |
Unity - Input System - InputAction (6) | 2025.08.06 |
프로젝트 소개 - 「현대세계 최후의 궁수」 (3) | 2025.08.05 |