게임 개발

게임개발 10일차 (1인칭 스타터에셋 이해)

쌍준 2025. 6. 5. 18:26

잘 만들어진 1인칭 스타터에셋을 이해해보는 시간을 가졌다.

먼저 플레이어다.

  • PlayerCapsule : 흔히 아는 Player라고 생각하면 된다.
  • PlayerCamraRoot : 1인칭 시점을 위해 캡슐의 살짝 위쪽에 붙어있는 빈 오브젝트
  • Capsule : 이 에셋에서는 이렇게 Player와 Capsule이라는 껍데기를 분리해놓았다. 이렇게 해놓으면 나중에 캡슐만 다른 걸로 바꿔끼우면 외형을 바꿀 수 있기 때문이다. Capsule에는 3가지 컴포넌트가 있다.
  1. Mesh Filter : 어떤 메시(모양)을 사용할 지 결정한다. 여기서는 캡슐
  2. Material : 이 모양이 어떤 색상과 질감을 가질 지 결정
  3. Mesh Renderer : 이렇게 만들어진 모양과 색상을 화면에 보이게 렌더링

플레이어는 이렇게 구성된다.

먼저 Player Input으로 입력(마우스 키보드)을 받는다.

그리고 그것을 Starter Assets Inputs에 변수로 저장한다. 다른 스크립트에서 하나하나 직접 입력을 받지 않아도 되고,
→ 이 클래스에서 통일된 방식으로 값만 참조하면 되므로 편함

입력을 가공해서 First Person Controller(1인칭)에 따라서 어떻게 움직일 지 결정한다. 이동 점프 중력 달리기 화면 돌리기 등이 있다.

어떻게 움직일 지 결정되면 그것을 이용해 Character Controller에서 실제로 캐릭터를 움직인다.

움직이던 과정에 충돌이 있으면 Basic Rigid Body Push로 어떻게 밀지 결정한다.

 

카메라는 이렇게 구성된다.

먼저 PlayerCameraRoot에서 어디서 카메라의 위치를 잡는다. 원래 했던 방식으로는 메인카메라를 플레이어 밑에 넣었으면 됐는데 좀 더 깔끔한 방식으로 하기 위해 이렇게 한다고 한다. (시네머신 방식이라고 한다)

PlayerFollowCamera의 ChinemachineVirtualCamera 컴포넌트로 PlayerCamaraRoot를 따라가기로 한다.

MainCamera는 이를 이용해 진짜 따라다닌다. CinemachineBrain 컴포넌트는 어떻게 따라가야 할지 알려준다.

 

Virtual Camera는 감독의 명령서
MainCamera는 그걸 따라 움직이는 진짜 카메라맨
CinemachineBrain은 감독 지시를 해석해서 MainCamera에 전달

 

🖱️ 사용자 입력
   ↓
🎮 PlayerInput (Input System)
   ↓
🧠 StarterAssetsInputs → FirstPersonController
   ↓
🧍 CharacterController.Move() → 이동
   ↓
📍 PlayerCameraRoot 위치가 바뀜
   ↓
🎥 Cinemachine Virtual Camera가 따라감
   ↓
🧠 CinemachineBrain이 MainCamera에 위치/회전 전달
   ↓
👁️ 화면에 최종 결과 출력!

 

 

캡슐 아래의 초록색은 바닥 판정을 하기 위한 구를 시각적으로 보여준다. 캡슐의 중앙에서 살짝 아래에서 구를 만들어서 바닥을 판정한다. 하지만 이렇게 하니까 모서리에 애매하게 걸치면 떨어질듯말듯 살짝 아래로 내려간상태에서 버틸수 있다는 단점이 있었다.

내일은 저 구를 네모로 만들어버리고 내 게임아이디어를 실제로 좀 구현해보려고 한다.