1、刚体自带添加力的方法
给刚体加力的目标就是让其有一个速度,朝向某一个方向移动
(1)首先应该获取刚体组件
Rigidbody rbody = this.GetComponent<Rigidbody>();(2)添加力
// 相对世界坐标
// 世界坐标系,Z轴正方向加了一个力
// 加力后对象是否停止移动,是由阻力(刚体组件的Drag)决定的,如果阻力为0,那给了一个力过后始终不会停止运动,或者如果希望即使有阻力,也希望对象一直运动,那么在Update中执行即可
rbody.Addforce(Vector.forward * speed)// 相对本地坐标系
rbody.AddRelateiveForce(Vector3.forward * speed);或者
rbody.AddForce(this.transform.forward * speed);(3)添加扭矩力,让其旋转
// 相对世界坐标
rbody.AddTorque(Vector.up * speed) // 以y轴旋转// 相对本地坐标
rbody.AddRelativeTorque(Vector.up * speed);(4)直接改变速度
// 这个速度方向适当对于世界坐标系的,如果要直接通过改变速度来让其移动,一定要注意这
rbody.velocity = Vector3.forward * speed;(5)模拟爆炸效果
// 注意:模拟爆炸的力,一定是所有希望产生爆炸效果影响的对象,都需要得到他们的刚体来执行这个方法,才能都有效果,即只影响调用了这个方法的对象
rbody.AddExplosionForce(力的大小,爆炸中心,爆炸半径)
2、力的几种模式
// 力的模式主要租用时计算方式的不同
rbody.AddForece(Vector3.forward * speed, ForceMode.***)动量定理:Ft = mv ——>v = Ft / m
F:力;t:时间;m:质量;v:速度
(1)Acceleration:给物体增加一个持续的加速度,忽略其质量,默认为1,假设:
F:(0,0,10)
t:0.02s(FixedUpdate的时间)
m:默认为1
v = 10 * 0.02 / 1 = 0.2m/s
每一物理帧移动:0.2m/s*0.02 = 0.004m
(2)Force:给物体添加一个持续的力,与物体的质量有关,假设:
F:(0,0,10)
t:0.02s
m:2kg
v = 10 * 0.02 / 2 = 0.1m/s
每一物理帧移动:0.1m/s*0.02 = 0.002m
(3)Impluse:给物体添加一个瞬时的力,与物体的质量有关,忽略时间,默认为1,假设:
F:(0,0,10)
t:默认为1
m:2kg
v = 10 * 1 / 2 = 5m/s
每一物理帧移动:5m/s*0.02 = 0.1m
(4)VelocityChange:给物体添加一个瞬时速度,忽略质量,假设:
F:(0,0,10)
t:默认为1
m:默认为1
v = 10 * 1 / 1 = 10m/s
每一物理帧移动:10m/s*0.02 = 0.2m
3、力场脚本
组件中有一个Constant Force脚本(会自动添加刚体组件)
4、刚体的休眠
Unity为了节省性能,会使刚体效果消失,比如:
一个立方体落在一个平面上,此时将屏幕的z轴旋转角度改变,立方体不会掉落,只有当平面向下移动时,立方体才会掉落
判断是否休眠:rbody.IsSleeping()
唤醒刚体属性:rbody.WakeUp()
总结:让一个物体产生位移的方式
- 直接在Update生命周期函数中,改变Transform当中的Position属性
- 直接在Update生命周期函数中,使用Transform提供的API Translate
- 通过加力
- 改变刚体速度

这篇博客探讨了在Unity中如何利用刚体组件进行力的添加,包括刚体自带的添加力方法、力的几种模式如Acceleration、Force、Impulse和VelocityChange的原理与区别,以及力场脚本的使用。同时,介绍了刚体休眠状态的判断和管理,总结了使物体产生位移的不同方式。
1685

被折叠的 条评论
为什么被折叠?



