- 개요
Photon SDK를 사용하여 유니티 기반의 멀티플레이어 FPS 게임을 만들어본다
따라서 플레이어의 입력과 입력에 따른 애니메이션을 구현한다
멀티 플레이어 게임을 염두하여 개발하므로 PlayerInput 컴포넌트 + Send Messages 방식으로 입력을 구현한다
- 애셋 작업
1) InputAction 애셋

Player 액션 맵에 총 3개의 Input Action이 존재한다
- Move 액션 : W / S / A / D 키를 입력받아 동작하며 상 / 하 / 좌 / 우로 플레이어를 이동
- Look 액션 : 마우스 커서에 따라 동작하며 플레이어를 회전
- Jump 액션 : 스페이스바를 눌러 동작하며 점프
2) Animator Controller 애셋

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


2개의 파라미터를 사용하여 애니메이션을 연출한다
- 상/하의 애니메이션을 처리하는 BledVertical 파라미터
- 좌/우의 애니메이션을 처리하는 BlendHorizontal 파라미터
처리하는 애니메이션은 총 5개로 Idle 상태와 앞 / 뒤 / 좌 / 우로 이동하는 애니메이션으로 구성하였다
Blend Type을 2D로 구성하여 각각의 애니메이션에 맞는 파라미터의 값을 사용한다
3) Player 프리팹의 컴포넌트 구성

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

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 함수를 호출하여 안정적으로 물리적인 이동과 회전을 처리한다
- 최종 실행 결과

'유니티 엔진 - 게임 프로젝트 > Photon을 사용한 멀티 플레이어 게임' 카테고리의 다른 글
| 서버 연결 - 1) Photon PUN의 사용 (0) | 2026.03.09 |
|---|---|
| 프로젝트 세팅 - 최종) 엄지 손가락 리깅 추가 (0) | 2026.03.09 |
| 프로젝트 세팅 - 3) Cinemachine의 사용과 조준 애니메이션 (0) | 2026.03.04 |
| 프로젝트 세팅 - 개선) InputManager 추가 (0) | 2026.02.24 |
| 프로젝트 세팅 - 2) 무기 변경과 리깅 (0) | 2026.02.23 |