碰撞检测之刚体加力

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

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
  • 通过加力
  • 改变刚体速度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值