我的意思是,如果在运行时有一个新的绑定到某个inputAction
,例如:
inputAction.performed += ctx => Function(ctx.ReadValue<float>());
假设在这个新的绑定之前,玩家已经将这个输入保存到1f
,并在绑定后继续。这个新的输入绑定对这个保存的值一无所知,因为没有对输入进行任何更改,因此没有调用回调。
然而,这是有问题的。我希望以前保存的输入能够执行回调,即使没有进行任何更改。
目前,输入会被吃掉,直到发生更改。
有没有办法配置这个?或者唯一的选择是手动编码?
您不能简单地更改事件在 c# 中的工作方式..您想要的基本上意味着:在附加侦听器的那一刻,还对操作状态进行轮询检查,如果当前按下/触发,则也立即调用该方法。
我认为你可以这样做,例如
作为替代方案 - 已经是架构/概念明智的 - 为什么甚至只动态附加侦听器?
您可以有一个包装类,它始终附加已有的侦听器
Awake
,因此它始终是最新的。然后,您的动态类可以将侦听器附加到始终最新的“中间件”上。基本上在输入系统之上添加一个抽象层,它允许您执行这两项操作,附加侦听器,但也无需事件即可轮询当前状态(尽管实际上如上所述,我认为输入系统已经提供了此功能)