Unity-物理系统之刚体加力
刚体自带添加力的方法
给刚体加力的目标是 让其有一个速度 朝向某一个方向移动
获取刚体组件
1 | Rigidbody rigidBody = this.GetComponent<Rigidbody>(); |
添加力
相对世界坐标 rigidBody.AddForce()
1 | rigidBody.AddForce(Vector3.forward * 10); |
相对本地坐标 rigidBody.AddRelativeForce()
1 | rigidBody.AddRelativeForce(Vector3.forward * 10); |
添加扭矩力
相对世界坐标 rigidBody.AddTorque()
1 | rigidBody.AddTorque(Vector3.up * 10); |
相对本地坐标 rigidBody.AddRelativeTorque()
1 | rigidBody.AddRelativeTorque(Vector3.up * 10); |
直接改变速度
rigidBody.velocity
这个速度方向 是相对于 世界坐标系的
1 | rigidBody.velocity = Vector3.forward * 5; |
模拟爆炸效果
rigidBody.AddExplosionForce()
- 模拟爆炸的力 一定是 所有希望产生爆炸效果影响的对象都需要得到他们的刚体 来执行这个方法 才能都有效果
1 | rigidBody.AddExplosionForce(100, Vector3.zero, 10); |
力的几种模式
- 第二个参数 力的模式 主要的作用 就是 计算方式不同
- 由于4中计算方式的不同 最终的移动速度就会不同
1 | rigidBody.AddForce(Vector3.forward * 10, ForceMode.Acceleration); |
Acceleration
- 给物体增加一个持续的加速度,忽略其质量
- v = Ft/m
- F:(0,0,10)
- t:0.02s
- m:默认为1
- v = 10*0.02/ 1 = 0.2m/s
- 每物理帧移动0.2m/s*0.02 = 0.004m
Force
- 给物体添加一个持续的力,与物体的质量有关
- v = Ft/m
- F:(0,0,10)
- t:0.02s
- m:2kg
- v = 10*0.02/ 2 = 0.1m/s
- 每物理帧移动0.1m/s*0.02 = 0.002m
Impulse
- 给物体添加一个瞬间的力,与物体的质量有关,忽略时间 默认为1
- v = Ft/m
- F:(0,0,10)
- t:默认为1
- m:2kg
- v = 10*1/ 2 = 5m/s
- 每物理帧移动5m/s*0.02 = 0.1m
VelocityChange
- 给物体添加一个瞬时速度,忽略质量,忽略时间
- v = Ft/m
- F:(0,0,10)
- t:默认为1
- m:默认为1
- v = 10*1/ 1 = 10m/s
- 每物理帧移动10m/s*0.02 = 0.2m
立场脚本
1 | 添加恒定力 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Escapeey`Blog!
评论