펭귄이 걷다가 물에 들어가기까지

걷기에서 수영까지 하나의 공간으로 연결했습니다
PenguTown의 첫 Unity 시제품에서는 펭귄이 얼음 위를 걷고 배로 미끄러지다가 물에 들어가 수영하도록 만들었습니다. 이동 상태를 목록으로 갖추는 데서 끝내지 않고, 경사면과 해안·수중에서 실제 물리 힘으로 이어지는지 확인했습니다. 주변 펭귄은 NPC이며 서버 멀티플레이를 구현한 단계는 아닙니다.
프로젝트는 다른 작업과 같은 Unity 6000.0.83f1을 사용했습니다. 먼저 작성했던 웹 초안은 별도로 보존했고 이번 Windows 플레이어와 구분했습니다. 브라우저용 구상과 Unity에서 실제 실행한 결과를 한 빌드처럼 설명하지 않았습니다.


원본 클립과 임시 자세 보정을 구분했습니다
모델은 OpenGameArt의 joyfulsquirrel Penguin을 확보했습니다. CC0 원본 ZIP·Blender·텍스처를 보존했으며 걷기·대기·수영은 원본 클립을 사용했습니다. Slide와 Dive 전용 클립은 없어 배 미끄러짐과 다이빙 자세는 초기 보정으로 구성했습니다.
Blender 액션에 표시된 범위는 1~2였지만 실제 키프레임은 1~23에 있었습니다. 이를 확인해 클립 재생 길이를 0.917초로 복원했습니다. FBX 단위 설정 때문에 리그와 메시 크기가 맞지 않던 부분도 FBX_SCALE_ALL로 수정했습니다. 동작이 짧거나 크기가 틀린 현상을 게임 이동 코드만으로 보정하지 않고 임포트부터 확인한 것입니다.
육지와 물에서는 다른 힘을 적용했습니다
Rigidbody와 MeshCollider로 중력·관성·충돌을 계산하고 물속에서는 부력·저항·추진력을 적용했습니다. 아래는 구현된 이동 흐름을 설명한 도표입니다. 실제 상태 머신 전체나 전이 조건 코드를 그대로 옮긴 것은 아닙니다.
flowchart LR
A["걷기"] --> B["배 미끄러짐과 경사 가속"]
B --> C["해안 이탈과 공중"]
C --> D["수영"]
D --> E["잠수"]
E --> F["부력 복귀"]
경사에서 빨라지고 해안 밖으로 나가 떨어진 뒤 물속에서 다시 떠오르는 흐름을 확인했습니다. 움직임을 장면별 연출로만 이어 붙이지 않고, 실제 물리 검사에서 각 상태와 위치를 읽었습니다. 카메라와 인사 UI도 기본 조작에 포함했습니다.
실제 플레이어에서도 다섯 상태를 관찰했습니다
PhysX QA에서 걷기·미끄러짐·공중·수영·잠수 전환이 모두 통과했습니다. 표본의 경사 최고 속도는 14.01m/s, 잠수 깊이는 -3.80m, 부력 복귀 높이는 -0.38m였습니다. 이 수치는 해당 시제품 검사 조건에서 나온 결과이며 다른 경사나 모델에도 같은 움직임을 보장하지 않습니다.
Windows 그래픽 플레이어 자동 조작에서도 다섯 상태가 관찰됐고 잠수 깊이를 대조했습니다. 원본 키 길이와 Unity 출력 재생 길이는 임포트 로그로 확인했습니다. 화면은 게임의 ScreenCapture로 직접 저장한 원본이며 제작 이미지가 아닙니다.
서버 멀티플레이·공개 채팅·계정·꾸미기·모바일 조작은 아직 없습니다. Unity WebGL 빌드도 수행하지 않았습니다. 물 효과와 카메라 전환, 조작감, 전용 Slide·Dive 애니메이션은 다음에 다듬을 부분입니다. 이번에는 사용할 수 있는 원본 클립의 범위를 확인하고, 육지에서 물로 이어지는 기본 플레이를 확보했습니다.
미로


댓글
이 글에 대한 생각을 남겨 주세요.