使用Performed判断了输入阶段。
public void OpenKeyMap(InputAction.CallbackContext input){ if(input.phase==InputActionPhase.Performed){ onPressMap?.Invoke(); } }两次触发打印的调用链不太一样:
还有一个报错:Assertion failed
UnityEngine.InputSystem.LowLevel.NativeInputRuntime/<>c__DisplayClass10_0:<set_onBeforeUpdate>b__0 (UnityEngineInternal.Input.NativeInputUpdateType)
UnityEngineInternal.Input.NativeInputSystem:NotifyBeforeUpdate (UnityEngineInternal.Input.NativeInputUpdateType)
问题发生在我们按M打开地图,输入系统切换到地图模式的映射,此时按M关闭地图,触发了2次,又直接打开了地图。
我推测是触发的回调里切换了actionMap,切换新的Map后还是按着的,又直接判断按下了。但是打开地图时没有触发两次。看了一下,是第二次被判断拦下来了?
试了一下打开地图也加判断,还是触发2次。
我们可以得出一个结论就是Performed阶段触发的操作,如果里面切换ActionMap,新的ActionMap还用这个函数,此时还按着按键,就会直接触发。但是我们这里是从Play切换到Map没问题,Map到Play触发2次。
然后看输入配置文件,打开地图的动作看到了这个设置,关闭地图的动作没有选,把这个关掉,问题解决了。
所以Initial State Check就是刚切到这个ActionMp,有按钮已经按下,就触发。