1.刚体自带添加力的方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson17 : MonoBehaviour
{
//声明一个成员变量,用来装获取到的刚体组件
Rigidbody rigid;
void Start()
{
//1.首先应该获取刚体组件,然后才能对这个刚体组件加力
// 得到了自己挂载的刚体组件
rigid = this.GetComponent<Rigidbody>();
//2.添加力
// 加力之后 对象是否停止移动是由刚体组件的阻力参数决定的
// 如果阻力为0,那么给了一个力后,物体始终都不会停止移动
// 2-1.相对世界坐标系
// 参数1 力的方向和大小
rigid.AddForce(Vector3.forward * 10);
//补充:如果想在世界坐标系方法中 让对象向自己的面朝向移动
//rigidBody.AddForce(this.transform.forward * 10);
// 2-2.相对本地坐标系
rigid.AddRelativeForce(Vector3.forward * 10);
//3.添加扭矩力,让其旋转
// 加扭矩力力之后 对象是否停止移动是由刚体组件的扭矩阻力参数决定的
// 如果扭矩阻力为0,那么给了一个扭矩力力后,物体始终都不会停止移动
// 3-1.相对世界坐标系
// 参数1 绕那个轴 和速度
rigid.AddTorque(Vector3.up * 10);
// 3-2.相对本地坐标系
rigid.AddRelativeTorque(Vector3.up * 10);
//3.直接改变速度
// 注意 这个速度的方向是相对于世界坐标系的
rigid.velocity = Vector3.forward * 10;
//4.模拟爆炸效果
// 注意 只有执行了这个方法的刚体 才会受爆炸效果影响
// 参数1 力的大小
// 参数2 爆炸的中心点
// 参数3 爆炸的半径
rigid.AddExplosionForce(10, Vector3.zero, 10);
}
}
2.力的几种模式
此知识点是根据加力 rigid.AddForce( ) 方法的基础上,添加第二个参数(是个枚举参数)
这四种枚举 只是力的计算方式不同而已,最终移动速度也不同
补充物理知识:
F:力
t:时间
v:速度
m:质量
动量定理公式:
Ft = mv
v = Ft/m
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson17 : MonoBehaviour
{
//声明一个成员变量,用来装获取到的刚体组件
Rigidbody rigid;
void Start()
{
//首先应该获取刚体组件,然后才能对这个刚体组件加力
rigid = this.GetComponent<Rigidbody>();
//1.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
rigid.AddForce(Vector3.forward * 10, ForceMode.Acceleration);
//2.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
rigid.AddForce(Vector3.forward * 10, ForceMode.Force);
//3.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
rigid.AddForce(Vector3.forward * 10, ForceMode.Impulse);
//4.VelocityChange
// 给物体添加一个瞬时速度,忽略质量(默认1)、忽略时间(默认1)
// v = Ft/m
// F:(0,0,10)
// t:默认为1
// m:默认为1
// v = 10 * 1 / 1 = 10m/s
// 每物理帧移动 10m/s * 0.02 = 0.2m
rigid.AddForce(Vector3.forward * 10, ForceMode.VelocityChange);
}
}
3.力场组件
除了上面的用代码加力,Unity还提供了加力的脚本
作用:更方便地给场景中的物体加力,让它转起来,仅仅是这个作用