📜  Unity-刚体与物理

📅  最后修改于: 2020-10-29 04:19:19             🧑  作者: Mango


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

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

您只需单击添加组件并在搜索字段中键入Rigidbody2D,即可将Rigidbody附加到您的GameObject。

刚体2D

单击Rigidbody2D会将组件附加到您的GameObject。现在已将其连接,您将注意到已经打开了许多新字段。

动态体型

使用默认设置,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的引用,并且更新代码在该引用上起作用,而不是对象的变换。这意味着刚体现在已被赋予了移动的责任。

您可能希望正文引用抛出NullReferenceException,因为我们尚未为其分配任何内容。如果按原样编译并运行游戏,则编辑器左下方将出现以下错误

身体参考

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

碰撞

将速度调整为较高的值(大约5),然后玩游戏。

您的碰撞现在将正常运行!