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

서버 연결 - 개선) 입력 시스템 2차 개선

monstro 2026. 3. 11. 19:56
728x90
반응형

- 개요

기존의 입력 시스템은 InputManager의 static 인스턴스를 사용하여 다음과 같이 처리하였다

  • 플레이어가 입력한 키의 입력값을 전달
  • Action을 멤버변수로 사용하여 입력값에 따라 동작할 콜백함수를 바인드

 

위와 같은 구조는 다음과 같은 문제점이 존재한다

  • 하나의 Action 다수의 클라이언트의 콜백함수가 바인드되어 문제를 추적하기 어려움
  • 전달할 입력값가장 마지막 클라이언트의 값으로 덮어씌워짐

 

따라서 InputManager를 제거하고 InputReader 컴포넌트로 수정하여

플레이어의 입력값을 개별적으로 처리할 수 있도록 개선한다

최종적으로 다음과 같은 구조로 입력 시스템을 수정한다

  • InputReader 컴포넌트 : 플레이어마다 존재 + 플레이어의 입력에 따라 입력값을 설정하고 전달
  • PlayerController 컴포넌트 : 플레이어마다 존재 + 전달된 값을 처리

 

마지막으로 ParrelSync 패키지를 프로젝트에 추가하여 빌드없이 멀티 플레이어를 테스트할 수 있도록 설정한다

 

- 스크립트 작업

1) InputReader 클래스

 

플레이어마다 생성되어 플레이어의 입력값을 전달하는 InputReader 클래스의 멤버변수는 위와 같다

  • MoveInput 프로퍼티 : Move 액션에 연결된 입력 값
  • LookInput 프로퍼티 : Look 액션에 연결된 입력 값
  • OnJumpPerforemd 액션 : Jump 액션에 연결된 키를 입력하면 실행하는 Action
  • OnSwapPerforemd 액션 : Swap 액션에 연결된 키를 입력하면 실행하는 Action
  • _playerInput 멤버변수 : 사용중인 PlayerInput 컴포넌트
  • _moveAction 멤버변수 : PlayerInput 컴포넌트에서 참조중인 Move 액션
  • _lookAction 멤버변수 : PlayerInput 컴포넌트에서 참조중인 Look 액션
  • _jumpAction 멤버변수 : PlayerInput 컴포넌트에서 참조중인 Jump 액션
  • _swapAction 멤버변수 : PlayerInput 컴포넌트에서 참조중인 Swap 액션

 

 

Awake 함수 + OnEnable 함수 + OnDisable 함수를 위와 같이 정의한다

  • Awake 함수 : 멤버변수의 값을 설정
  • OnEnable 함수 : InputAction 멤버변수들에 이벤트 기반 방식으로 콜백함수 연결
  • OnDisable 함수 : 이벤트 기반 방식으로 연결된 콜백 함수들연결 해제

 

 

이전에 람다 형식으로 작성한 콜백 함수들위와 같이 정의하였다

 

2) PlayerController 클래스

 

위와 같이 멤버변수를 추가한다

  • _inputReader 멤버변수 : InputReader 컴포넌트
  • _photonView 멤버변수 : 식별하기 위한 PhotonView 컴포넌트
  • _rigBuilder 멤버변수 : 조준선에 따라 리깅을 적용하기 위한 RigBuilder 컴포넌트

 

 

Awake 함수 + Start 함수를 위와 같이 수정한다

  • Awake 함수 : 새롭게 추가한 멤버변수들의 값을 설정
  • Start 함수 : 로컬 클라이언트인지 확인하여 아니라면 불필요한 컴포넌트들비활성화하고 얼리 리턴

 

 

기존의 함수들에 로컬 클라이언트인지 확인하는 로직을 추가한다

따라서 로컬 클라이언트인 경우에만 로직을 수행한다

 

- 최종 실행 결과

728x90
반응형