Unity - 刚体和物理


上一章中冲突的主要问题在于代码。我们现在将直接修改游戏对象位置的值。如果玩家按下某个键,我们只是向该位置添加一个值。我们需要一种方法让玩家移动时能够对边界和其他游戏对象做出正确的反应。

为此,我们需要了解什么是刚体。刚体是允许游戏对象对实时物理做出反应的组件。这包括对力和重力、质量、阻力和动量的反应。

您只需单击“添加组件”并在搜索字段中输入 Rigidbody2D,即可将 Rigidbody 添加到游戏对象。

二维刚体

单击 Rigidbody2D 会将组件附加到您的游戏对象。现在它已经附加了,您会发现许多新的领域已经打开。

动态体型

在默认设置下,游戏对象将由于重力而垂直下落。为了避免这种情况,请将重力比例设置为 0。

现在,玩游戏不会显示任何明显的差异,因为游戏对象与其物理组件没有任何关系。

为了解决我们的问题,让我们再次打开代码并重写它。

public class Movement : MonoBehaviour {
   public float speed;
   public Rigidbody2D body;
   // Update is called once per frame
   void Update() {
      float h = Input.GetAxisRaw(“Horizontal”);
      float v = Input.GetAxisRaw(“Vertical”);
      body.velocity = new Vector2(h * speed, v * speed);
   }
}

我们可以看到,我们在声明中创建了对 Rigidbody2D 的引用,并且我们的更新代码适用于该引用而不是对象的变换。这意味着刚体现在被赋予了移动的责任。

您可能期望主体引用抛出 NullReferenceException,因为我们没有为其分配任何内容。如果你按原样编译并运行游戏,你会在编辑器左下角看到以下错误

身体参考

为了解决这个问题,让我们考虑一下脚本创建的组件。请记住,公共属性在 Unity 中创建自己的字段,就像我们对速度变量所做的那样。

碰撞

将速度调整到更高的值,大约5,然后玩游戏。

您的碰撞现在可以正常工作了!