重力与质量
本课属于 Coddy Unity 学习旅程的“物理与游戏玩法”单元。第 1 课,共 71 课。
Rigidbody 会把它的对象交给 Unity 的物理系统处理,就像你在“添加组件”中添加 Rigidbody 时一样。从那时起,重力每秒会让对象的速度增加 9.81 m/s,而 Rigidbody 的设置决定了具体效果。其中两个设置是 mass,单位为千克(新建 Rigidbody 的值为 1),以及 useGravity(新建 Rigidbody 时为开启状态)。
质量不会改变物体下落的速度。重物受到的重力更大,但要让它加速也恰好更难,所以从同一高度落下的 1 kg 板条箱和 50 kg 铁砧会在同一帧落地。物体相互推挤时,质量就很重要:铁砧会把板条箱撞到一边,而板条箱几乎推不动铁砧。这个派对气球的质量很轻,不受重力影响,因此会停留在场景放置它的位置:
void Start()
{
Rigidbody rb = GetComponent<Rigidbody>();
rb.mass = 0.2f;
rb.useGravity = false;
}关闭 useGravity 后,气球仍然有质量,碰到其他物体时也仍然会移动:只有重力不再拉着它。将它重新设为 true,重力就会从对象所在的位置再次拉动它。Unity 的物理系统中也没有空气,所以羽毛会像砖块一样下落,除非你为它的 Rigidbody 设置一些线性阻尼。
挑战
简单挂起两个箱子,然后按下空格键让它们一起掉落。
- 在
Start()中的GetComponent行下面,设置rb.mass = weight;和rb.useGravity = false;。 - 在
Update()中,当检测到Input.GetKeyDown(KeyCode.Space)时,设置rb.useGravity = true;。
按下 运行,再按空格键:沉重的 Safe 和轻的 Box 会一起落地。然后点击 检查。
亲手试试
using UnityEngine;
public class CraneLoad : MonoBehaviour
{
public float weight = 1f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
// 将质量设为 weight,并关闭重力作用
}
void Update()
{
// Space:重新启用重力
}
}
物理与游戏玩法中的所有课
自己练习: Unity 在线编辑器