Unity - 刚体和物理



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

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

您可以通过单击添加组件并在搜索字段中键入Rigidbody2D来将刚体附加到您的游戏对象。

Rigidbody2D

单击Rigidbody2D会将组件附加到您的游戏对象。附加后,您会注意到许多新字段已打开。

Dynamic Body Type

使用默认设置,由于重力,游戏对象将垂直向下坠落。为避免这种情况,请将重力缩放设置为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的引用,并且我们的更新代码作用于该引用而不是对象的变换。这意味着刚体现在承担了移动的责任。

您可能期望body引用抛出NullReferenceException,因为我们尚未为其分配任何值。如果您按原样编译并运行游戏,您将在编辑器的左下角看到以下错误。

Body Reference

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

Collisions

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

您的碰撞现在将正常工作!

广告