要解决 Ruby 的抖动问题,你需要移动刚体本身而不是游戏对象变换组件,并让物理系统将游戏对象位置同步到刚体位置。这样,物理系统就可以在进入箱子之前停止移动,而不必在 Ruby 已经进入箱子之后再移动 Ruby。
为此,需要修改 Ruby Controller 代码:
1.双击 RubyController 脚本以将其打开。你的脚本应如下所示:
2. 因为默认情况下,所有游戏对象都具有一个 Transform 组件,所以 Unity 使 transform 变量在所有脚本中都可用。但是,必须将 Rigidbody 组件手动添加到游戏对象,因此 Unity 并没有将这个变量作为内置变量。
3. 除此之外,物理系统的更新速度与游戏不同。每次游戏计算新图像时都会调用 Update,问题是调用速度不确定。在一台速度较慢的计算机上,调用速度可能是每秒 20 张图像,而在一台非常快的计算机上,调用速度可能是每秒 3000 张图像。
为了使物理计算保持稳定,需要定期进行更新(例如,每隔 16ms)。Unity 还有另一个名为 FixedUpdate 的函数,只要你想直接影响物理组件或对象(例如刚体),就需要使用该函数。
但是,你不应该读取 Fixedupdate 函数中的输入。FixedUpdate 不会持续运行,因此有可能会错过用户输入。你需要在类中添加两个浮点变量,以便在 Update 函数内存储当前的水平和垂直输入数据。
如下所示调整 RubyController 脚本: