开发手册 欢迎您!
软件开发者资料库

Unity - Rigidbodies和Physics

Unity Rigidbodies和Physics - 从简单和简单的步骤学习Unity,从基本到高级概念,包括简介,安装和设置,创建精灵,修改精灵,变换和对象育儿,内部资产,保存和加载场景,基本运动脚本,了解碰撞,刚体和物理,自定义碰撞边界,了解预制件和实例化,游戏对象销毁,协程,控制台,音频简介,从UI开始,按钮,文本元素,滑块,材质和着色器,粒子系统,使用资产商店。

上一章中碰撞的主要问题在于代码. 我们现在将直接修改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,然后玩游戏.

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