Unity - Rigidbodies和Physics

上一章中碰撞的主要问题在于代码. 我们现在将直接修改GameObject的位置值.如果玩家正在按键,我们只是在该位置添加一个值.我们需要一种方法让玩家以这样的方式移动,使其对边界和其他游戏对象做出正确的反应.

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

只需单击添加组件并输入Rigidbody2D即可将刚体附加到游戏对象在搜索字段中.

Rigidbody2D

点击Rigidbody2D将附加组件到你的GameObject.现在它被附加了,你会注意到许多新字段已经打开.

动态体型

使用默认设置,游戏对象将因重力而垂直落下向下.为避免这种情况,请将重力比例设置为0.

现在,玩游戏不会显示任何明显的差异,因为GameObject没有任何关系还有它的物理组件.

要解决我们的问题,让我们再次打开我们的代码,并重写它.

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创建引用,我们的更新代码适用于该引用而不是Object的转换.这意味着Rigidbody现在已经被赋予了移动的责任.

您可能希望 body 引用抛出NullReferenceException,因为我们没有为它分配任何内容.如果您按原样编译和运行游戏,您将在编辑器的左下角出现以下错误

Body Reference

要解决这个问题,让我们考虑一下脚本创建的组件.请记住,公共属性在Unity中创建自己的字段,就像我们使用速度变量一样.

Collisions

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

您的碰撞现在可以正常运行了!