New Input System
Legacy가 되어버린 꽤 되었지만, 아직까지는 기존의 Input Manager을 사용하고 있었다, 최근에서야 Legacy를 사용하지 않고, New Input System을 사용하고 있다, 내 머리를 아프게 했던 New Input System의 내용까
fore4022.tistory.com
New Input System에 대해서 모른다면, 위의 글을 먼저 읽어보길 바란다.
Cannot find Action Map
위의 문제는 action map을 수정한 것이 제대로 update되지 않아서 생기는 문제이다.
유니티 자체 오류이다.
해결 방법은 오류가 나는 action map을 사용하는 Player input 컴포넌트의 action map을 None으로 바꿨다가, 다시 원래 action map을 선택하면 해결된다.
New Input System Call Back이 동작하지 않음.
앞서 몇 번 New Input System Call Back을 구현할 때는 위에 설명한 방식대로 구현해도 아무런 문제가 없었지만, 어느 날 평소와 같이 문제 없이 Call Back을 만들었는데 해당 콜백이 실행되지 않는 문제이다.
원인은 이러하다, action map을 사용하기 위해서는 활성화가 필요한데, Player Input 컴포넌트에서 사용하고 있는 action map은 자동으로 활성화 상태가 된다. 가끔 오류로 인해서 Player Input에서 action map을 사용해도 활성화가 되지 않는 문제가 있다.
문제가 있는 action map을 가진 action을 변수로 사용하는 스크립트에서 action map을 활성화 시켜주면 된다.
(선언한 스크립트 변수).(input map 이름).Enable();
input map이 항상 문제 없이 활성화 된다면 좋겠지만, 오류는 항상 언제 발생할지 모르는 일이니, input map을 활성화 시켜주는 것이 좋을 것 같다.
참고로 직접 c# 스크립트화 된, input action을 활성화 시켜주었다면, player input에 input action을 넣는 작업을 하지 않아도 된다.
Read Value
입력에 대한 값을 Vector3로 받아온다고 하여서, 그 값을 Vector2로 읽어올 수 없다. 값을 받아온 후에 Vector2로 변환해 주어야 한다.
이벤트 발생
모든 입력이 Started, Perform, Canceled를 발생시키지는 않는다. 여러번의 입력이 발생해도 Started는 한번만 호출되는 경우도 존재한다.
혹시 이벤트가 예기치 못한 방향으로 동작할 경우, 발생되는 조건을 확인해 볼 필요가 있다.
InputAction Enable/Disable
"Touch Started, Performed, Canceled를 받는 InputAction이 비활성화 되어있다."
"이 상태에서 화면에 Touch를 하고 있을 때, InputAction이 활성화 된다면?"
위의 예시를 보면, InputAction이 비활성화 된 상태에서 활성화 된다면 어떻게 될지에 대한 의문점을 제시하고 있다.
위의 의문점에 답을 하자면 Performed를 제외한 Started, Canceled는 활성화 된 시점부터 발생한 입력에 대해 반응한다. Performed는 InputAction이 비활성화 상태일 때 발생한 입력에 대해서, 활성화 되었을 때 반응한다.
반면에 Started와 Canceled는 InputAction이 비활성 상태에서 활성화 상태가 되어도, 활성화 되기 이전의 입력에 대한 반응을 하지 않는다.
"Started는 InputAction이 비활성화 상태여서 실행이 안된 것은 알겠는데, Canceled는 실행되어야 하는 것 아닌가요?"
위의 의문처럼 헷갈릴 수 있다. 우리는 위에서 설명하였던 ‘활성화 된 시점부터 발생한 입력’이라는 것에 대해서 초점을 두고 다시 생각해 보면, 그에 대한 답을 얻을 수 있다.
Started, Performed, Canceled의 동작을 설명하면 아래와 같다.
"입력에 대한 Event"
위를 통해서 알 수 있는 내용을 토대로, Canceled를 다시 확인해 보면 아래와 같다. Canceled는 InputAction이 활성화 되기 이전에 발생한 입력이 끝났다는 것에 대한 이벤트일 뿐이다.
InputAction Enable/Disable 또한 입력과 그 방식에 따라서 차이가 생긴다는 점을 명심해야 한다.
New Input System을 사용하면서, 본인은 이런 상황을 겪었지만, 읽는 분들께서는 아래와 같은 문제 상황에 봉착하지 않았으면 한다.
'유니티 > 겪었던 문제' 카테고리의 다른 글
| 에디터/빌드 환경에서 Instance의 차이 (0) | 2025.06.25 |
|---|---|
| ScriptableObject를 사용하며 겪었던 문제 (0) | 2025.04.24 |
| 충돌 검사 (0) | 2024.12.24 |