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
반응형
'유니티 엔진 - 게임 프로젝트 > Photon을 사용한 멀티 플레이어 게임' 카테고리의 다른 글
| 서버 연결 - 최종) 무기 스포너 설계 + 무기 변경 동기화 (0) | 2026.03.17 |
|---|---|
| 서버 연결 - 3) 다른 클라이언트와 위치 + 애니메이션 동기화 (0) | 2026.03.16 |
| 서버 연결 - 2) Room 입장 + 플레이어 분리 (0) | 2026.03.10 |
| 서버 연결 - 개선) 입력 시스템의 개선 (0) | 2026.03.10 |
| 서버 연결 - 1) Photon PUN의 사용 (0) | 2026.03.09 |