当前位置: 首页 > news >正文

Unity-物理系统-刚体加力

一 刚体自带添加力的方法


        给刚体加力的目标就是 
        让其有一个速度 朝向某一个方向移动

     

  1.首先应该获取刚体组件


        rigidBody = this.GetComponent<Rigidbody>();

       

2.添加力


        //相对世界坐标
        //世界坐标系 Z轴正方向加了一个里
        //加力过后 对象是否停止移动 是由阻力决定的
        //如果阻力为0 那给了一个力过后 始终 是不会停止运动

        //rigidBody.AddForce(Vector3.forward * 10);
        //如果想要在 世界坐标系方法中 让对象 相对于自己的面朝向动
        //rigidBody.AddForce(this.transform.forward * 10);

        //相对本地坐标
        //rigidBody.AddRelativeForce(Vector3.forward * 10);


        3.添加扭矩力,让其旋转


        相对世界坐标
        rigidBody.AddTorque(Vector3.up * 10);
        相对本地坐标
        rigidBody.AddRelativeTorque(Vector3.up * 10);

        4.直接改变速度


        这个速度方向 是相对于 世界坐标系的 
        如果要直接通过改变速度 来让其移动 一定要注意这一点

        rigidBody.velocity = Vector3.forward * 5;

        5.模拟爆炸效果


        模拟爆炸的力 一定是 所有希望产生爆炸效果影响的对象 
        都需要得到他们的刚体 来执行这个方法 才能都有效果

        rigidBody.AddExplosionForce(100, Vector3.zero, 10);

二、ADDFORCE第二个参数 ,力的几种模式

        第二个参数 力的模式 主要的作用 就是 计算方式不同而已 
        由于4中计算方式的不同 最终的移动速度就会不同

        rigidBody.AddForce(Vector3.forward * 10, ForceMode.Acceleration);

        动量定理
        Ft = mv
         v = Ft/m;


        F:力
        t:时间
        m:质量
        v:速度

        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

        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

        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

        4.VelocityChange

给物体添加一个瞬时速度,忽略质量,忽略时间


        //v = Ft/m
        //F:(0,0,10)
        //t:默认为1
        //m:默认为1
        //v = 10*1/ 1 = 10m/s
        //每物理帧移动10m/s*0.02 = 0.2m

 刚体的休眠 力场脚本(明天完善)


        获取刚体是否处于休眠状态 如果是 
        if (rigidBody.IsSleeping())
        {
            就唤醒它
            rigidBody.WakeUp();
        }

http://www.lryc.cn/news/444735.html

相关文章:

  • 深入探究PR:那些被忽视却超实用的视频剪辑工具
  • Unity-麦克风输入相关
  • NLP--自然语言处理学习-day1
  • ER论文阅读-Incomplete Multimodality-Diffused Emotion Recognition
  • Matlab自学笔记36:日期时间型的概念、分类和创建方法
  • Spring Boot自定义配置项
  • 【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
  • 什么时候用synchronized,什么时候用Reentrantlock
  • [ffmpeg]音频格式转换
  • SSRF工具类-SsrfTool
  • python集合运算介绍及示例代码
  • 『功能项目』按钮的打开关闭功能【73】
  • Linux 常用命令 - more 【分页显示文件内容】
  • Kotlin Android 环境搭建
  • 常见协议及其默认使用的端口号
  • 04-Docker常用命令
  • 数字化转型中的供应链管理优化
  • 【Python报错已解决】SyntaxError: invalid syntax
  • 树上差分+lca 黑暗的锁链
  • opencv4.5.5 GPU版本编译
  • 线性跟踪微分器TD详细测试(Simulink 算法框图+SCL完整源代码)
  • LabVIEW闪退
  • 【WPF】03 动态生成控件
  • 调试LTE模块碰到的4字节对齐问题
  • 一篇讲完HTML核心内容
  • 2024icpc(Ⅱ)网络赛补题 G
  • AIGC时代!AI的“iPhone时刻”与投资机遇
  • Kubernetes调度单位Pod
  • C语言指针篇
  • Unity 使用Editor工具查找 Prefab 中的指定脚本