학습 동기
게임 내에서 플레이어가 탈것에 올라타고 일정 시간 동안 조작하거나, 추가 점프가 가능한 구조를 만들고자 했다. 탈것은 ScriptableObject로 설계하여 다양한 종류의 탈것 효과(속도, 점프력 등)를 쉽게 설정하고, 탑승한 상태에서 플레이어가 자연스럽게 이동하거나 점프할 수 있도록 만들고자 했다. 탈것과 플레이어가 분리된 오브젝트인 만큼 이들을 어떻게 유기적으로 연결하고, 탑승 상태를 직관적으로 처리할 수 있을지 고민하게 되었다.
학습 내용
ScriptableObject를 활용해 MountItem이라는 탈것 정보를 정의하고, 여기에 탈것의 프리팹과 이동 속도, 점프 차징 속도 등 세부 데이터를 포함시켰다. MountHandler에서는 해당 아이템을 기반으로 탈것 프리팹을 Instantiate한 뒤, 초기에는 플레이어 위치만 해당 탈것 위치로 순간이동시켰으나, 이동 시 탈것이 따라오지 않는 문제가 있었다. 이를 해결하기 위해 플레이어를 탈것의 자식 오브젝트로 설정하여 함께 움직이도록 구성했다. 이 과정에서 부모-자식 관계의 Transform 처리 방식이 Unity 내에서 얼마나 자연스럽게 동작하는지를 다시 확인할 수 있었다.
탑승 여부는 isMounted 불리언 값으로 제어하였으며, 중복 탑승이나 탈것 중복 생성을 방지하는 기본적인 상태 체크도 동시에 구현하였다. 또, 탑승한 상태에서 점프력이나 이동 속도에 영향을 주기 위해, 기존 점프 시스템과 탈것 시스템이 자연스럽게 연결되도록 JumpPowerSystem과의 통합 시나리오도 염두에 두었다.
To-do
- 각 탈것 프리팹이 서로 다른 애니메이션을 가질 경우를 대비해 AnimatorOverrideController 도입 검토
- 탈것과 플레이어 간 충돌 처리를 위한 콜라이더 구조 설계 및 테스트
- 탑승/하차 기능을 트리거 방식으로 분리할지, 키 입력 방식으로 단순화할지 결정
- 탈것 사용 상태가 UI나 HUD에 반영될 수 있도록 관련 데이터 흐름 점검
주의점
Transform 구조를 잘 활용하면 별도의 이동 로직 없이도 자연스럽게 자식 오브젝트가 부모와 함께 움직이고 회전하는 점이 매우 유용하게 느껴졌다. 플레이어와 탈것이 같은 좌표계를 공유하게 됨으로써 물리 충돌이나 입력 전달에서 예외 처리가 줄어든 점도 설계적으로 이점이었다. Unity의 구조적 특성을 활용하면 단순한 기능도 매우 직관적으로 구현할 수 있다는 것을 체감했다.
'Unity > Unity 개발' 카테고리의 다른 글
| 인벤토리 UI 연동 및 Timeline 연출 구현 (1) | 2025.06.04 |
|---|---|
| 스테이지 기반 자원 리스폰 시스템 설계 (0) | 2025.06.04 |
| Unity에서 컴포넌트 참조 방식 비교 및 최적화 전략 (1) | 2025.05.20 |
| 탑다운 게임에서 곡사포 형식의 투사체 발사 구현 (0) | 2025.05.14 |
| SpriteRenderer 기준으로 Collider가 부정확하게 설정됨 (0) | 2025.05.14 |