유니티 엔진/입력 처리 심화

유니티 6에서의 입력 처리 - (6) Player Input Component

monstro 2025. 11. 25. 23:16
728x90
반응형

*** 수정 ***

Player Input Manager 컴포넌트는 로컬 멀티 플레이어 게임에서만 유효하므로,

온라인 멀티 플레이어 게임이나 대형 게임 구조에서는 사용하기에는 부적합하다

 

- 개요

https://www.youtube.com/watch?v=beDfIBLfx4c&list=PLX2vGYjWbI0RpLvO3B7aH-ObfcOifMD20&index=6

 

이번에는 Player Input Component를 사용하여 여러명의 플레이어에 대한 입력을 설정하는 방법을 알아본다

단, 실제 동작까지는 구현하지 않고 코드로 설계하는 방법 위주로 알아본다

 

- 사전 정보

1) 로컬 멀티 플레이어 환경에서의 Input System

로컬 멀티 플레이어 환경에서 Input System을 사용하는 경우 2개의 컴포넌트를 사용하여 동작한다

  • 1) Player Input 컴포넌트 : 오브젝트와 Input Action의 연결을 자동으로 수행하는 컴포넌트
  • 2) Player Input Manager 컴포넌트 
    • Scene 안의 여러명의 플레이어의 서로 다른 Input을 제어하는 컴포넌트
    • 여러명의 플레이어가 서로 다른 키를 눌러 같은 게임에 입장하면 각각의 Player Input 컴포넌트가 생성됨
    • Player Input Manager 컴포넌트는 플레이어마다 생성된 Player Input 컴포넌트를 제어

 

2) 에디터에서의 Player Input 컴포넌트

Player Input 컴포넌트

 

에디터에서 확인할 수 있는 Player Input 컴포넌트는 위와 동일하다

구성은 각각 다음과 같다

 

2 - 1) Default Scheme

Default Scheme의 구성

 

Default Scheme은 Player Input 컴포넌트에 대한 특정 Input Controller를 지정한다

위와 같이 6개의 옵션이 존재하며, Any로 지정하면 사용 중인 컨트롤러가 자동으로 할당된다

그리고 Default Scheme으로 지정된 Controller는 다른 플레이어는 사용할 수 없다

 

2 - 2) Default Map

Default Map의 구성

 

Default Map을 통해 사용중인 Input Action Asset에서 사용할 Action Map을 설정한다

 

2 - 3) Behavior

Behavior의 구성

 

위와 같이 4개로 구성된 Behavior를 사용하여 Input Action을 통해 발생하는 이벤트를 처리할 수 있다

  • 1) Send Messages : 스크립트와 Player Input 컴포넌트가 동일한 GameObject에 있을 경우 사용
    • Player Input 컴포넌트가 동일한 위치에 있는 스크립트에 메세지를 전파
  • 2) Broadcast Messages : 스크립트와 Player Input 컴포넌트가 다른 GameObject에 있을 경우 사용
    • Player Input 컴포넌트가 메세지를 브로드캐스트하여 해당 오브젝트에 위치한 모든 스크립트에 전파
    • 인스펙터 창에서 어떤 메세지를 전파할지 확인가능
  • 3) Invoke Unity Events : 인스펙터 창에서 각 액션(Started, Performed, Canceled)에 대한 이벤트를 연결
    • 예를 들어 Device Lost 이벤트와 Device Regained 이벤트를 연결하여 입력장치가 끊어졌을 때에 대응
  • 4) Invoke C# Events : 인스펙터 창이 아닌 C# 스크립트에서 각 액션에 대한 이벤트를 연결
    • 연결하기 이전에 사용중인 Input Action Asset에 대해서 Generate C# Class를 수행

 

- 각 Behavior에 대한 Input System 설정 방법

1) Send Messages 방식 + Broadcast Messages 방식

Send Messages 방식

 

Broadcast Messages 방식

 

위와 같이 사용중인 Input Action Asset - Action Map에 존재하는 Input Action들에 대해서

미리 만들어진 콜백함수를 제공하고 제공된 콜백함수를 오버라이드하여 Input System을 설정할 수 있다

 

 

위와 같이 OnMove 함수와 OnLook 함수를 오버라이드하였고,

이때 오버라이드된 함수들은 public을 수식하여 Player Input 컴포넌트에서 접근할 수 있도록 설정한다

 

2) Invoke Unity Events 방식

 

사용중인 Input Action Asset - Action Map에 존재하는 Input Action들에 대한 이벤트 함수를 정의한다

 

 

정의한 이벤트 함수들을 인스펙터 창에서 각각의 Input Action과 연결하여 설정한다

 

3) Invoke C# Events 방식

Input Action Asset에 대한 설정

 

사용하기에 앞서 사용중인 Input Action Asset에 대해서 Generate C# Class를 수행한다

 

 

생성한 Input Action Asset의 클래스의 인스턴스를 멤버변수로 추가한다

 

 

추가한 인스턴스 멤버변수의 값을 설정한다

프로젝트에서는 위와 같이 Awake 함수에서 수행하였다

 

 

해당 인스턴스 멤버변수를 통해 Acion Map에 접근하여 활성화 + 비활성화를 진행하고,

Action Map에 포함된 Input Action들의 동작방식에 대한 이벤트 함수들을 연결 + 연결해제한다

위의 작업은 모두 OnEnable 함수와 OnDisable 함수에서 진행한다

 

 

이벤트 함수들은 위와 같이 정의하였다

728x90
반응형