【Unity】Rigibody——刚体加力、刚体加扭矩力、刚体加力的几种模式

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还提供了加力的脚本
作用:更方便地给场景中的物体加力,让它转起来,仅仅是这个作用
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值