当前位置:   article > 正文

【Physics】一、Rigidbody 刚体_rigidbody.addforce怎么计算施加的力是多大

rigidbody.addforce怎么计算施加的力是多大

点击访问官网 物理系统刚体概述刚体 (Rigidbody)

1、刚体组件

刚体 (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显示刚体信息。

2、刚体脚本

点击访问官网 Rigidbody Class

2.1、获取刚体

Rigidbody rb;

void Start()
{
    rb = transform.GetComponent<Rigidbody>();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.2、添加力

  • 向刚体添加力(在中心):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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 在 position 处施加力。这将向对象施加扭矩和力:AddForceAtPosition(方向大小,施加力的位置,力类型)
// 共 2 个重载
rb.AddForceAtPosition(new Vector3(0, 1, 0), forcePosition.position, ForceMode.Impulse);
  • 1
  • 2
  • 向模拟爆炸效果的刚体施加力:AddExplosionForce(爆炸力,爆炸中心,爆炸半径,...)
// 共3个重载
rb.AddExplosionForce(100, forcePosition.position, 3);
  • 1
  • 2

2.3、Move

  • 将刚体运动到 position:MovePosition(position)
rb.MovePosition(target.position);
  • 1
  • 将刚体旋转到 rotation:MoveRotation(rotation)
rb.MoveRotation(target.rotation);
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/89624
推荐阅读
相关标签
  

闽ICP备14008679号