유니티 엔진 - 게임 프로젝트/Photon을 사용한 멀티 플레이어 게임

프로젝트 세팅 - 1) 플레이어의 입력 + 애니메이션 처리

monstro 2026. 2. 18. 18:36
728x90
반응형

- 개요

Photon SDK를 사용하여 유니티 기반의 멀티플레이어 FPS 게임을 만들어본다

따라서 플레이어의 입력입력에 따른 애니메이션을 구현한다

멀티 플레이어 게임을 염두하여 개발하므로 PlayerInput 컴포넌트 + Send Messages 방식으로 입력을 구현한다

 

- 애셋 작업

1) InputAction 애셋

InputAction 애셋의 구성

 

Player 액션 맵에 총 3개의 Input Action이 존재한다

  • Move 액션 : W / S / A / D 키를 입력받아 동작하며 상 / 하 / 좌 / 우로 플레이어를 이동
  • Look 액션 : 마우스 커서에 따라 동작하며 플레이어를 회전
  • Jump 액션 : 스페이스바를 눌러 동작하며 점프

 

2) Animator Controller 애셋

Animator Controller의 Base Layer의 구성

 

Movement 블렌드 트리를 사용하여 기본적인 애니메이션을 연출한다

 

Blend Tree의 구성 (1)

 

Blend Tree의 구성 (2)

 

2개의 파라미터를 사용하여 애니메이션을 연출한다

  • 상/하의 애니메이션을 처리하는 BledVertical 파라미터
  • 좌/우의 애니메이션을 처리하는 BlendHorizontal 파라미터

 

처리하는 애니메이션은 총 5개 Idle 상태 앞 / 뒤 / 좌 / 우로 이동하는 애니메이션으로 구성하였다

Blend Type을 2D로 구성하여 각각의 애니메이션에 맞는 파라미터의 값을 사용한다

 

3) Player 프리팹의 컴포넌트 구성

Player 프리팹의 컴포넌트 구성

 

Player 프리팹의 컴포넌트를 위와 같이 구성한다

  • Animator 컴포넌트 : 애니메이션 연출을 위한 컴포넌트
  • Rigidbody 컴포넌트 : 물리 작용 처리를 위한 컴포넌트
  • PlayerInput 컴포넌트 : 플레이어 한명입력을 전달하고 처리하기 위한 컴포넌트
  • PlayerMovement 컴포넌트 : 플레이어의 입력에 따른 이동을 처리하는 스크립트
  • Capsule Collider 컴포넌트 : 다른 오브젝트와오버랩을 처리하기 위한 컴포넌트

 

- 스크립트 작업 

1) PlayerMovement 스크립트

SerializeField 멤버변수의 구성

 

SerializeField 멤버변수를 위와 같이 구성하여 실험적으로 값을 수정할 수 있도록 설정한다

  • moveSpeed 멤버변수 : 플레이어의 이동속도
  • rotateSpeed 멤버변수 : 플레이어의 회전속도
  • jumpForce 멤버변수 : 플레이어의 점프크기
  • groundLayer 멤버변수 : 플레이어가 땅을 딛고 있는지 판단하기 위한 LayerMask
  • groundCheckRadius 멤버변수 : 플레이어가 땅을 딛고 있는지 판단하기 위해 Trace할 Sphere의 반지름
  • groundCheckOffset 멤버변수 : Sphere Trace를 수행할 거리

 

멤버변수의 구성

 

멤버변수를 위와 같이 구성한다

  • isGrounded 멤버변수 : 땅을 딛고 있는지 여부
  • rb 멤버변수 : Rigidbody 컴포넌트
  • anim 멤버변수 : Animator 컴포넌트
  • direction 멤버변수 : 캐릭터가 이동할 방향의 벡터
  • lookDirection 멤버변수 : 캐릭터가 회전할 방향의 벡터
  • playerAcionMap 멤버변수 : 사용하는 InputAction 애셋Action 맵
  • playerInput 멤버변수 : PlayerInput 컴포넌트

 

 

Awake 함수를 위와 같이 오버라이드한다

  • rb 멤버변수의 값을 설정하고 freezeRotation 속성을 True로 설정하여 물리에 의한 플레이어의 회전을 방지
  • anim 멤버변수 playerInput 멤버변수의 값을 설정

 

 

OnEnable 함수와 OnDisable 함수를 오버라이드하여 사용중인 Action Map을 활성화 / 비활성화한다

 

 

Input Action에 바인드된 키를 누를때마다 전송하는 Message의 콜백함수들을 위와 같이 생성한다

  • OnMove 함수 : direction 변수의 값을 설정하여 캐릭터의 이동방향을 설정
  • OnLook 함수 : lookDirection 변수의 값을 설정하여 캐릭터의 회전방향을 설정
  • OnJump 함수 : 땅을 딛고 있으면서 연결된 키가 눌렸다면, AddForce 함수를 호출하여 캐릭터를 점프

 

 

Update 함수를 위와 같이 오버라이드한다

  • 지면을 대상으로 Sphere Trace를 수행하여 땅인지 판단하여 그 값을 isGrounded에 저장
  • Animator의 BlendVertical 파라미터와 BlendHorizontal 파라미터의 값을 설정
    • 댐핑 인자를 추가로 부여하여 SetFloat 함수에서 보간을 처리

 

 

FixedUpdate 함수를 위와 같이 오버라이드하여 ApplyMovement 함수와 ApplyRotation 함수를 호출한다

2개의 함수는 MovePosition 함수와 MoveRotation 함수를 호출하여 안정적으로 물리적인 이동과 회전을 처리한다

 

- 최종 실행 결과

 

728x90
반응형