유니티/유니티 C#

유니티 입력 처리 심화 - (8) Player Input 컴포넌트 - Send Messages

monstro 2025. 1. 2. 20:20
728x90
반응형

이번 포스트에서는 Player Input 컴포넌트를 통해 Input System을 사용하는 4가지 방법 중에서

첫번째로 Send Messages를 알아보겠습니다.

 

Player Input 컴포넌트를 추가한 후에,

Behavior 항목에서 Send Messages로 설정하였습니다.

 

 

위와 같이 설정한 Input Action Asset - Action Map 아래의 기본적인 Input Action들 외에도

추가적으로 만든 Input Action들이 보이는 것을 확인할 수 있습니다.

 

Send Messages 방식은 다음과 같이 동작합니다.

입력 이벤트에 따라 호출할 함수의 이름 규약On + Input Action명으로 지어집니다.
이때, 내부적으로 GameObject.SendMessages 메서드를 통해

PlayerInput 컴포넌트가 부착된 GameObject에게 콜백 함수의 수행 결과를 전달합니다.
그리고 메세지의 전달 바인딩되어 있는 키를 누르는 경우에만 발동합니다.

 

이제, 실제로 Send Messages 방식을 통해 입력을 처리해보도록 하겠습니다.

1) PlayerInput 컴포넌트 - SendMessages 방식을 통한 입력 처리

코드는 다음과 같습니다.

public class SendMessaages : MonoBehaviour
{
    [SerializeField]
    private float speed;
    private Rigidbody2D rigidbody2D;
    private Vector2 direction;

    private void Awake()
    {
        rigidbody2D = GetComponent<Rigidbody2D>();    
    }

    private void FixedUpdate()
    {
        // 물리와 관련된 RigidBody의 경우 Update 보다는 
        // Update 이후 프레임을 처리하는 FixedUpdate 에서 수행하는 것이 좋음 
        rigidbody2D.velocity = new Vector2(direction.x * speed, rigidbody2D.velocity.y);
    }

    // Send Messages 설정에 사용하기 위한 콜백함수 이름 규약에 맞춰 이름을 작성
    private void OnPress()
    {
        Debug.Log("Press");
    }

    // Send Messages 설정에 사용하기 위한 콜백함수 이름 규약에 맞춰 이름을 작성
    private void OnMoveHorizontal(InputValue value)
    {
        direction.x = value.Get<float>();
    }
}

 

Send Messages 방식을 사용하여 Input System을 구현하는 것에서 가장 중요한 것

콜백 함수의 이름을 규칙에 맞게 사용하는 것입니다.

생성한 코드를 컴포넌트로서 우리가 움직일 오브젝트에 추가하겠습니다.

 

 

Speed 변수의 값을 위와 같이 구성하였습니다.

이제 최종 실행 결과를 확인해보겠습니다.

 

 

위와 같이 키 입력에 따른 콜백 함수를 잘 수행하는 것을 확인할 수 있습니다.

728x90
반응형