발생 문제


Start함수 시작 시 action map 전체를 비활성화 시켜주는 작업만 함.

중간중간 현재 action map의 enabled 상태를 보여줌.

private async UniTaskVoid Start()
{
Debug.Log("Start");
PrintState();

Debug.Log("Disable");
InputActionAsset.Disable();
PrintState();
await UniTask.Yield();

Debug.Log("1 Frame");
PrintState();
await UniTask.Yield();

Debug.Log("2 Frame");
PrintState();
}

예상되는 결과로는 Disable 이후로는 disabled 상태여야 하지만

실제로는 2프레임 째에 enabled 상태로 변경됨.


빈 프로젝트에서 테스트해보았으나 마찬가지이고

event system, ui input module이나 다른 input action asset에 의해 생기는 문제는 아니라고 판단됨.


Stage, Skill, UI 3개의 Action Map이 있음.

7cf3da36e2f206a26d81f6e444827568d8

Disable 이후 1프레임 까지는 False 상태이지만 2프레임 째에 True로 변경됨.


어제 몇시간동안 원인이 뭔지 찾아 해매다가

레딧에서 2주 전에 해결한 사람 글을 발견하고

동일하게 적용해보니 문제가 해결됨.


해결 방법

Project Wide Actions 제거

Project-Wide Actions | Input System | 1.8.2

Project-Wide Actions | Input System | 1.8.2

docs.unity3d.com


7ff3da36e2f206a26d81f6e14282726a



Project Settings - Input System Package 설정으로 가면 있는 옵션.

원래는 사용하던 asset을 등록해두었으나 제거하고 테스트.

7ef3da36e2f206a26d81f6e4478573648e


2프레임 째에 False가 출력되는 것을 확인할 수 있음.



그 외

관련 레딧 글 링크


왜 이런 문제가 발생하는 지 모르겠으나 몇 시간을 날려버려서 화가 나는 것.


추가 문제로 player input의 default action map을

none으로 설정할 수 없고

다른 값으로 설정하더라도 항상 모든 map이 enabled 되어있음.


버그인지 뭔지 모르겠으나

다행히 필요했던 auto switch 기능은 잘 동작하는 듯 함.

따라서 Start 시에 모든 map을 disable시켜주고

playerInput.SwitchCurrentActionMap을 호출해서

필요한 map만 켜주면 될 것 같음.



한줄 요약

Project Wide Action 등록하지 마라

021