Unity - 刚体和物理

  • 简述

    上一章中冲突的主要问题在于代码。我们现在将直接修改游戏对象位置的值. 如果玩家按下一个键,我们只是在位置上添加一个值。我们需要一种方法让玩家移动,使其对边界和其他游戏对象做出正确反应。
    为此,我们需要了解什么rigidbodies是。刚体是允许游戏对象做出反应的组件real-time physics. 这包括对力和重力、质量、阻力和动量的反应。
    您可以通过简单地单击将刚体附加到您的游戏对象Add Component并在搜索字段中输入 Rigidbody2D。
    二维刚体
    单击 Rigidbody2D 会将组件附加到您的游戏对象。现在它已附加,您会注意到许多新字段已打开。
    动态车身类型
    使用默认设置,游戏对象将垂直下落down由于重力。为避免这种情况,请设置Gravity Scale为 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);
       }
    }
    
    我们可以看到我们创建了一个reference到声明中的 Rigidbody2D,我们的更新代码在该引用而不是对象的转换上工作。这意味着刚体现在被赋予了移动的责任。
    您可能会期望body引用 throw NullReferenceException,因为我们没有为它分配任何东西。如果您按原样编译并运行游戏,您将在编辑器左下方收到以下错误
    身体参考
    为了解决这个问题,让我们考虑脚本创建的组件。请记住,公共属性在 Unity 中创建自己的字段,就像我们对速度变量所做的那样。
    碰撞
    将速度调整到更高的值,大约 5,然后玩游戏。
    您的碰撞现在可以正常工作了!