给刚体加力的目标是让其有一个速度,然后朝某一个方向移动。
如果我们想要给刚体自带添加力,首先应该获取刚体组件:
rigidbody= this.GetComponent<Rigidbody>();
然后添加力,如果希望对象相对于世界坐标系移动
rigidBody.AddForce(Vector3.forward*速度);//在世界坐标系,Z轴正方向加了一个力,加力过后对象是否停止移动,是由阻力(刚体组件的Drag)决定的,如果阻力为0,那给了一个力过后始终不会停止运动,或者如果希望即使有阻力,也希望对象一直运动,那么在Update中执行即可
//如果想要在世界坐标系方法中让对象相对于自己的面朝向移动或相对于本地坐标系移动 rigidBody.AddForce(this.transform.forward*速度);
或
rigidBody.AddRelateiveForce(Vector3.forward*速度);
如果想要添加扭矩力,让其旋转,可以使用以下代码,当然它也分为世界坐标系和本地坐标系两种
// 相对于世界坐标系 rigidBody.AddTorque(Vector3.up*速度); // 以y轴旋转 // 相对于本地坐标系 rigidBody.AddRelativeTorque(Vector.up*速度);
如果想要直接改变速度:
//这个速度方向适当对于世界坐标系的,如果想要直接通过改变速度来让其移动,一定要注意这一点 rigidBody.velocity = Vector3.forward*速度;
如果想要模拟爆炸效果的话:
//要注意的是模拟爆炸的力,必须所有希望产生爆炸效果影响的对象都得到他们的刚体来执行这个方法,才能得到爆炸效果。 rigidBody.AddExplosionForce(力的大小,爆炸中心,爆炸半径);
我们在给具有刚体的物体添加力时,经常使用的方法是:Rigidbody.AddForce(方向*力的大小,力的模式);
运动速度的计算公式是Ft=mv即:力时间=质量速度,则我们可以通过该公式推断出v=F*t/m
力的各种模式都使用不同的计算方式,由于四种计算方式的不同,最终的移动速度也会不同。其中力的模式共有四种:
Acceleration::给物体添加一个持续的加速度,但是忽略其质量。即无论设置的质量为多少,都采用默认质量1。
Force:给物体添加一个持续的力,与物体的质量有关。
Impulse:给物体添加一个瞬间的力,与物体的质量有关,而且会忽略时间,默认值为1.
VelocityChange:给物体添加一个瞬间的加速度,该模式忽略其质量。
需要注意一个bug,Unity的刚体有时候为了节约性能,会进入休眠状态,我们可以通过
If(rigidBody.IsSleeping)//判断刚体是否处于休眠状态 { rigidBody.wakeUp;//如果是,则唤醒刚体 }
该语句可以在刚体休眠的时候唤醒刚体