발생 문제
Start함수 시작 시 action map 전체를 비활성화 시켜주는 작업만 함.
중간중간 현재 action map의 enabled 상태를 보여줌.
{
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이 있음.
Disable 이후 1프레임 까지는 False 상태이지만 2프레임 째에 True로 변경됨.
어제 몇시간동안 원인이 뭔지 찾아 해매다가
레딧에서 2주 전에 해결한 사람 글을 발견하고
동일하게 적용해보니 문제가 해결됨.
해결 방법
Project Wide Actions 제거
Project-Wide Actions | Input System | 1.8.2
docs.unity3d.com
Project Settings - Input System Package 설정으로 가면 있는 옵션.
원래는 사용하던 asset을 등록해두었으나 제거하고 테스트.
2프레임 째에 False가 출력되는 것을 확인할 수 있음.
그 외
왜 이런 문제가 발생하는 지 모르겠으나 몇 시간을 날려버려서 화가 나는 것.
추가 문제로 player input의 default action map을
none으로 설정할 수 없고
다른 값으로 설정하더라도 항상 모든 map이 enabled 되어있음.
버그인지 뭔지 모르겠으나
다행히 필요했던 auto switch 기능은 잘 동작하는 듯 함.
따라서 Start 시에 모든 map을 disable시켜주고
playerInput.SwitchCurrentActionMap을 호출해서
필요한 map만 켜주면 될 것 같음.
한줄 요약
Project Wide Action 등록하지 마라
해결 방법 : 유니티가 아니라 고도였다면...
고도는 언제 오는가...
역시 수퍼루키가 돌아오니까 갤 분위기가 달라지는 것이에오
착실한 사람이 되겟어오..
날 잔뜩선 글 때문에 먹던거 빨리 먹고 일 할려고 했는데ㅋ / 딱 좋은 글 보고 가네~ㅋ / 실제로 유니티 자체 버그가 있을 수도 있어?
버그 은근히 많고 쓰는 기능마다 버그 발견하고 스트레스받아서
바퀴부터 만드려고 하는 성향이 강해진 것 같음.
예전엔 유니티에 버그리포트도 했었는데 이젠 안함
https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=113652
저때
내 버전은 고치지도 않고 패싱당했다가 3달 뒤에 고쳐줌. ㅋㅋ
버그 발견할때마다 글올리는건 아니라 기억은 안나는데
최근에 봤던건 이거인듯.
https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=168791
완벽하게 믿으면 안되는구나...ㅋ 델타값 초기화는 멘붕왔을거 같은데...ㅋ