【发布时间】:2021-12-27 19:42:17
【问题描述】:
我希望在最后几帧中轮询 Unity 输入,并使用该数据来解释用户的按钮按下。然而,根据我的测试,感觉就像以应用程序的 60 FPS 帧速率进行轮询会导致错过一些非常快速的输入。
简单示例,用户尝试从 Down 前进:
frame 1 - user is holding Down
frame 1.5 - user taps Forward, but hasn't released Down yet
frame 2 - user lets go of Down and has reached Forward fully
在我当前的设置中,使用统一的帧率更新,用户同时按住向下和向前的帧 1.5 完全错过了。有没有办法运行单独的更新,运行速度比常规的 Unity MonoBehaviour 更新功能更快?或者是否需要不同的解决方案,例如通过事件查询(iirc 是一个选项,但我可能记错了)?
【问题讨论】:
-
你能分享你的代码吗?不,你不能(不是内置输入系统)。但是:实际上没有 1.5 帧这样的东西......如果用户在最后一帧之后按下并释放了一个按钮,那么在下一个更新调用中
Input.GetButtonDown和Input.GetButtonUp都将返回true!所以我认为问题在于你如何实现 Input .. 或者我的问题是:如果没有要为它渲染的框架,你为什么认为 Input 很重要,那么它应该有什么效果/影响? -
我认为在这种情况下共享代码不会有帮助。我对 1.5 帧的观点是,在某些设备上可以以 1 毫秒的频率读取输入,这比单帧要精细得多。当您说输入系统无法解决此问题时,我明白您的意思。
-
正如我所说 .. 输入系统 确实 说明了这一点,并告诉您自上一帧以来该键已被按下并已释放 .. 所以您绝对可以从中扣除在最后一帧的某个时刻,同时按下了两个键......我的问题是:你为什么要关心?你的游戏玩法到底有什么变化?
-
它会改变游戏的响应能力,如果您在多个帧上解释输入,可能会给游戏带来不好的感觉,例如街头霸王中四分之一圈的向前运动
-
我不知道《街头霸王》中四分之一圈的向前运动是什么样子的 tbh ^^ 但不,我仍然不明白这一点
标签: unity3d