Rigidbody简介

Unity 3D 中的 Rigidbody 可以为游戏对象赋予物理特性,使游戏对象在物理系统的控制下接受推力与扭力,从而实现现实世界中的物理学现象。

我们通常把在外力作用下,物体的形状和大小(尺寸)保持不变,而且内部各部分相对位置保持恒定(没有形变)的理想物理模型称为刚体。

刚体(Rigidbody)是物理引擎中最基本的组件。通过该组件可以给物体添加一些常见的物理属性,如质量、摩擦力、碰撞参数等。

Unity 3D 提供了多个实现接口,开发者可以通过更改这些参数来控制物体的各种物理状态。

刚体在各种物理状态影响下运动,刚体的属性包含:

  • Mass(质量)
  • Drag(阻力)
  • Angular Drag(角阻力)
  • Use Gravity(是否使用重力)
  • Is Kinematic(是否受物理影响)
  • Collision Detection(碰撞检测)

刚体添加方法

在 Unity 3D 中创建并选择一个游戏对象,执行菜单栏中的 ComponentPhysicsRigidbody 命令为游戏对象添加刚体组件。

刚体选项参数

游戏对象一旦被赋予刚体属性后,其 Inspector 属性面板会显示相应的属性参数与功能选项,具体内容如下表所示。

参数 含义 描述
Mass 质量 物体的质量(任意单位)。建议一个物体的质量不要与其他物体 相差100倍。
Drag 阻力 当受力移动时物体受到的空气阻力。0表示没有空气阻力,极大时使物体立即停止运动。
Angular Drag 角阻力 当受扭力旋转时物体受到的空气阻力。0表示没有空气阻力, 极大时使物体立即停止旋转。
Use Gravity 使用重力 该物体是否受重力影响,若激活,则物体受重力影响。
Is Kinematic 是否是运动学 游戏对象是否遵循运动学物理定律,若激活,该物体不再受物理 引擎驱动,而只能通过变换来操作。适用于模拟运动的平台或 者模拟由铰链关节连接的刚体。
Interpolate 插值 物体运动插值模式。当发现刚体运动时抖动,可以尝试下面的 选项:None(无),不应用插值;Interpolate(内插值),基于上一巾贞 变换来平滑本帧变换;Extrapolate(外插值),基于下一帧变换来 平滑本帧变换。
Collision Detection 碰撞检测 碰撞检测模式。用于避免高速物体穿过其他物体却未触发碰 撞。碰撞模式包括Discrete (不连续)、Continuous (连续)、 Continuous Dynamic (动态连续〉3种。其中,Discrete模式用来 检测与场景中其他碰撞器或其他物体的碰撞;Continuous模式 用来检测与动态碰撞器(刚体)的碰撞;Continuous Dynamic模式用来检测与连续模式和连续动态模式的物体的碰撞,适用于 高速物体。
Constraints 约束 对刚体运动的约束。其中,Freeze Position(冻结位置)表7TC刚体 在世界中沿所选HZ轴的移动将无效,Freeze Rotation(冻结 旋转)表示刚体在世界中沿所选的XYZ轴的旋转将无效。

数学计算

Ft = mv 数学表达式为:FΔt=mΔv

  • Ft代表冲量
    F是作用力,t是力的作用时间
  • mv是动量
    M是物体的质量,V是物体的运动速度.

API

常用API

注意:我们在代码中控制刚体的移动 最好是把刚体的运动代码写到FixedUpdate中

1
2
3
4
5
6
7
ForceMode.Force; //默认方式 持续力
ForceMode.Acceleration //可持续加速度 会忽略刚体的实际质量而采用默认值1.0f
ForceMode.Impulse //瞬间冲击力 把t的值默认为1
ForceMode.VelocityChange //直接改变速度大小 采用默认质量1.0,同时也忽略系统的实际帧频间隔,采用默认间隔1.0
rigidbody.AddForce(Vector3.forward*500);//世界坐标前方(Z轴)方向添加一个500的力。
rigidbody.AddForce(transform.forward*500);//自己的坐标前方(Z轴)方向添加一个500的力。

Unity手册-Rigidbody

https://docs.unity.cn/cn/2020.2/ScriptReference/Rigidbody.html