我正在 Unity 2022.3.8f1 上制作一款平台游戏。当我在游戏中同时按下左键和右键时,玩家开始滑动而不是停止。这行代码负责玩家沿 X 轴的移动:
rig.velocity = new Vector2(Input.GetAxis("Horizontal") * speed, rig.velocity.y);
我尝试调试函数本身Input.GetAxis("Horizontal"),并意识到问题出在函数本身,而不是我的代码中。帮我做到这一点,这样当你按两个按钮时,播放器就会停止,就像你没有按任何东西一样,我会很高兴。这是视频
https://www.youtube.com/watch?v=0cro58rt-PQ
出现此问题是由于 GetAxis 本身的特殊性造成的。据我了解,如果此方法检测到输入的存在,则从 GetAxisRaw 获取值,然后将其相乘或以某种方式转换到其返回值。当GetAxisRaw找不到输入值时,它也会逐渐将其值变为0。
因此,当您按下两个键时,您不会完全相同地执行此操作,并且 GetAxisRaw 的内部值设法转移到一侧,然后冻结,因为按键仍然被按下,也就是说,有输入,但它们的总和为零,这意味着没有发生位移。
为了避免这个问题,你可以自己处理GetAxisRaw,这似乎是最简单的方法。您将需要独立实现速度的平滑变化,但除此之外,此方法是有效的。