赞
踩
点击访问官网 物理系统 、刚体概述 、 刚体 (Rigidbody)
刚体 (Rigidbody) 使游戏对象的行为方式受物理控制。刚体可以接受力和扭矩,使对象以逼真的方式移动。任何游戏对象都必须包含受重力影响的刚体,行为方式基于施加的作用力(通过脚本),或通过 NVIDIA PhysX 物理引擎与其他对象交互。
属性 | 功能 |
---|---|
Mass | 对象的质量(默认为千克)。 |
Drag | 根据力移动对象时影响对象的空气阻力大小。 0 表示没有空气阻力,无穷大使对象立即停止移动。 |
Angular Drag | 根据扭矩旋转对象时影响对象的空气阻力大小。 0 表示没有空气阻力。 请注意,如果直接将对象的 Angular Drag 属性设置为无穷大,无法使对象停止旋转。 |
Use Gravity | 如果启用此属性,则对象将受重力影响。 |
Is Kinematic | 如果启用此选项,则对象将不会被物理引擎驱动,只能通过__变换 (Transform)__ 对其进行操作。 对于移动平台,或者如果要动画化附加了 HingeJoint 的刚体,此属性将非常有用。 |
Interpolate | 仅当在刚体运动中看到急动时才尝试使用提供的选项之一。 |
● None | 不应用插值。 |
● Interpolate | 根据前一帧的变换来平滑变换。 |
● Extrapolate | 根据下一帧的估计变换来平滑变换。 |
Collision Detection | 用于防止快速移动的对象穿过其他对象而不检测碰撞。 |
● Discrete | 对场景中的所有其他碰撞体使用离散碰撞检测。 其他碰撞体在测试碰撞时会使用离散碰撞检测。 用于正常碰撞(这是默认值)。 |
● Continuous | 对动态碰撞体(具有刚体)使用离散碰撞检测,并对静态碰撞体(没有刚体)使用基于扫掠的连续碰撞检测。 设置为__连续动态 (Continuous Dynamic)__ 的刚体将在测试与该刚体的碰撞时使用连续碰撞检测。 其他刚体将使用离散碰撞检测。 用于__连续动态 (Continuous Dynamic)__ 检测需要碰撞的对象。 (此属性对物理性能有很大影响,如果没有快速对象的碰撞问题,请将其保留为 Discrete 设置) |
● Continuous Dynamic | 对设置为__连续 (Continuous)__ 和__连续动态 (Continuous Dynamic)__ 碰撞的游戏对象使用基于扫掠的连续碰撞检测。 还将对静态碰撞体(没有刚体)使用连续碰撞检测。 对于所有其他碰撞体,使用离散碰撞检测。 用于快速移动的对象。 |
● Continuous Speculative | 对刚体和碰撞体使用推测性连续碰撞检测。 这也是可以设置运动物体的唯一 CCD 模式。 该方法通常比基于扫掠的连续碰撞检测的成本更低。 |
Constraints | 对刚体运动的限制: |
● Freeze Position | 有选择地停止刚体沿世界 X、Y 和 Z 轴的移动。 |
● Freeze Rotation | 有选择地停止刚体围绕局部 X、Y 和 Z 轴旋转。 |
Info | 显示刚体信息。 |
点击访问官网 Rigidbody Class
Rigidbody rb;
void Start()
{
rb = transform.GetComponent<Rigidbody>();
}
AddForce(方向大小,力类型)
/**
* enum ForceMode
* Force:使用刚体的质量向刚体添加连续力 F = m · a
* Acceleration:将连续加速度添加到刚体,忽略其质量 v = a · t
* Impulse:使用刚体的质量向刚体添加即时力脉冲 I = F · t = m · a · t = m · v
* VelocityChange:将即时速度变化添加到刚体,忽略其质量
*/
rb.AddForce(new Vector3(0, 0, 1), ForceMode.VelocityChange); // 共 4 个重载
// 上面那句力模型为 VelocityChange 时与下面这句对速度直接赋值效果完全一毛一样
rb.velocity = new Vector3(0, 0, 1);
AddForceAtPosition(方向大小,施加力的位置,力类型)
// 共 2 个重载
rb.AddForceAtPosition(new Vector3(0, 1, 0), forcePosition.position, ForceMode.Impulse);
AddExplosionForce(爆炸力,爆炸中心,爆炸半径,...)
// 共3个重载
rb.AddExplosionForce(100, forcePosition.position, 3);
MovePosition(position)
rb.MovePosition(target.position);
MoveRotation(rotation)
rb.MoveRotation(target.rotation);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。