유니티/유니티 C#

유니티 입력 처리 심화 - (13) Action Asset에서의 Index와 Composite

monstro 2025. 1. 23. 01:28
728x90
반응형

이번 포스트에서는 Action Asset의 요소 중에서 Index와 Composite에 대해 알아보겠습니다.

우선, 예제로 사용하는 Action Asset의 구성을 간단하게 훑어보겠습니다.

 

 

위와 같은 구성으로 이뤄져 있습니다.

여기서 Input Action은 총 5개로,

Jump / MoveHorizontal / MoveVertical / Attack / SpecialAttack으로 구성되어 있습니다.

 

1) Action Asset에서의 Index

Index는 Action Asset에 속해 있는 각기 다른 Input Action마다 배정되는데

처음 들었을 때 상당히 이해하기 힘든 구조로 되어 있습니다.

위의 Action Asset에서의 Index를 그림으로 표현하면 다음과 같습니다.

 

 

즉, 하나의 Input Action에 설정되어 있는 요소들번호로 표현하면 Index로 표기할 수 있는 것입니다.

이때 Index0번부터 시작하며 1씩 증가하며, 다른 Input Action으로 넘어가는 순간 0으로 초기화됩니다.

 

2) Composite

사실 Index를 알게된 순간 Composite은 매우 쉽게 이해할 수 있습니다.

한 Input Action에서 Index가 0인 요소를 Composite이라고 합니다.

즉, Input Action의 0번째 IndexComposite입니다.

그리고 그 이후로 이어지는 Index들Composite Parts라고 표기합니다.

 

예제로 설명하자면, Input Action인 MoveHorizontal에서 Index는 총 3개이고,

Composite1D Axis, Composite PartsA와 D가 됩니다.

 

이와 같은 Index와 Composite의 개념동작중인 게임에서 연결된 키를 변경하는

Rebind에서 매우 중요하게 사용됩니다.

지금 당장 Rebind를 수행하지는 않지만, Play중인 게임에서 Index와 Composite에 

접근하는 예제를 통해 이들이 어떻게 동작하는지 알아보겠습니다.

 

3) 예제

public class CheckIndexComposite : MonoBehaviour
{
    [SerializeField]
    private InputActionReference inputActionReference;
    [Range(0, 10)]
    [SerializeField]
    private int selectedBinding;

    [SerializeField]
    private InputBinding inputBinding;

    // OnValidate는 스크립트가 로드되거나, 인스펙터에서 값이 변경되는 경우에 호출되는 에디터 전용 함수
    private void OnValidate()
    {
        if (inputActionReference == null)
            return;
        if (inputActionReference.action.bindings.Count > selectedBinding)
            inputBinding = inputActionReference.action.bindings[selectedBinding];
    }
}

 

위와 같은 스크립트를 구성하였습니다.

우선 InputAction을 참조로 받게 되는데, Inspector 창을 통해 설정하겠습니다.

그리고 해당 Input Action의 Index들을 의미하는 selectedBinding을 작성하였습니다.

 

InputBinding의 경우, 런타임 시점에서 Input과 관련된 정보를 확인할 수 있는 구조체입니다.

따라서 최종적으로 InputAction을 설정하면 해당 InputAction의 정보를 Inspector창에서 볼 수 있습니다.

 

실행 결과는 다음과 같습니다.

간단하게 Jump와 MoveHorizontal을 확인해보겠습니다.

우선 Jump입니다.

 

다음으로는 MoveHorizontal입니다.

 

위와 같이 동작하는 것을 확인할 수 있습니다.

728x90
반응형