Unity中的刚体
发布日期:2021-06-30 19:58:37
浏览次数:2
分类:技术文章
本文共 2063 字,大约阅读时间需要 6 分钟。
在移动或旋转一个物体时,我们往往会直接使用Transform来执行这些操作。这种方法对于不具物理特性的GameObject来说,是可行的。但是一旦GameObject上附带有刚体组件,这种方式就会带来性能的损失。对于有刚体的游戏物体官方强烈建议使用物理方式使其移动
一:Rigibody2D
——BodyType:刚体类型 1.Dynaimc:动态类型,默认此类型 2.Kinematic:动力学类型(开启后游戏对象则不再受到物理引擎的影响从而只能通过Transform属性来对其操作) 3.Static:静态类型 ——Material:物理材质(本文章第三节) ——Use Auto Mass:使用自动计算的质量 ——Mass:质量(建议同一场景中的游戏对象之间的质量差值不要大于100倍) ——Linear Drag:运动方向的空气阻力 ——Angular Drag:旋转时受到的空气阻力 ——Gravity Scale:重力缩放 ——Collision Detection:碰撞检测类型,是为了避免高速运动的碰撞体进行检测时的穿模现象,例如赛车游戏 1.Discrete:离散碰撞检测,正常速度下可以使用离散碰撞检测 2.Continuous:连续碰撞检测,适用于可能会被高速移动物体撞上的物体注意使用Continuous这种类型进行检测会产生性能的消耗 ——Sleeping Mode:休眠模式 1.Never Sleep:永不休眠 2.Start Awake:在程序启动时唤醒 3.Start Asleep:在碰撞检测时唤醒,其余时间处在休眠状态 ——Interpolate:插值(基本上使用不到)——Constraints:约束,可以冻结受到物理的力所改变的位置与旋转,使用Translate进行移动并不会被影响二:Rigibody
——Mass:质量(建议同一场景中的游戏对象之间的质量差值不要大于100倍) ——Drag:运动方向的空气阻力 ——Angular Drag:旋转时受到的空气阻力 ——Use Gravity:是否使用重力 ——IsKinematic:是否开启动力学(开启后游戏对象则不再受到物理引擎的影响从而只能通过Transform属性来对其操作) ——Interpolate:插值(基本上使用不到) ——Collision Detection:碰撞检测类型,是为了避免高速运动的碰撞体进行检测时的穿模现象,例如赛车游戏 1.Discrete:离散碰撞检测,正常速度下可以使用离散碰撞检测 2.Continuous:连续碰撞检测,适用于可能会被高速移动物体撞上的物体 3.Continuous Dynamic:动态连续碰撞检测,适用于高速移动的物体 4.Continuous Speculative:推测式连续碰撞检测,这是唯一的CDD模式注意Continuous和Continuous Dynamic类型只支持使用Box,Sphere和Capusle碰撞器的刚体,而且使用这两种类型进行检测会产生性能的消耗——Constraints:约束,可以冻结受到物理的力所改变的位置与旋转,使用Translate进行移动并不会被影响三:物理材质
不设置物理材质的物体默认为infinity
——Dynamic Friction:动态摩擦力 ——Static Friction:静态摩擦力 ——Bounciness:弹力 ——Friction Combine:组合摩擦力 1.Average:平均(取两个碰撞物体的摩擦力平均值) 2.Mininum:最小值(取两个物体的摩擦力最小值) 3.Multiply:乘数(取两个物体的摩擦力的乘积) 4.Maximum:最大值(取两个物体的摩擦力最大值) ——Bonce Combine:组合弹力 1.Average:平均(取两个碰撞物体的摩擦力平均值) 2.Mininum:最小值(取两个物体的摩擦力最小值) 3.Multiply:乘数(取两个物体的摩擦力的乘积) 4.Maximum:最大值(取两个物体的摩擦力最大值)例如很多物体在同一个场景中挤着很卡,如下图所示
这是因为Unity默认碰撞物体有个Physc Material,Friction摩擦力为0.4,可以把Friction设置为0赋给碰撞的物体
四:几点需要注意的
——两个质量不同的物体从同一高度落地,时间是一样的。
例如两个物体质量分别为1和1000,在同一高度落下,落地的时间是相同的。 由公式可知,落地的时间与质量无关。 但是在现实生活中结果却不是这样,因为现实中有空气阻力的存在,而在虚拟世界或者在真空中可以完全忽略空气阻力 ——两个物体发生碰撞的条件:两个物体都有碰撞器并且其中一个有刚体组件 ——没有刚体组件的物体质量默认为infinity,所以一个有刚体的物体去碰撞一个没有刚体的物体会撞不动,一个没有刚体的物体去碰撞一个有刚体的物体会撞动 ——两个物体能否发生碰撞转载地址:https://liuhaowen.blog.csdn.net/article/details/88112699 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月13日 11时45分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Oracle 自定义函数实现split功能,支持超长字符串和clob类型的分隔
2019-04-30
Oracle 的循环中的异常捕捉和处理
2019-04-30
Oracle通过pivot和unpivot配合实现行列转换
2019-04-30
给Oracle数据库换一个1522端口的监听
2019-04-30
Excel表格数据生成ECharts图表
2019-04-30
阿里云短信服务python版,pyinstaller打包运行时缺少文件
2019-04-30
Oracle的pfile和spfile的一点理解和笔记
2019-04-30
WebService的简单案例记录(Java)
2019-04-30
Html利用PHP与MySQL交互
2019-04-30
dos简单命令
2019-04-30
mysql的安装与卸载与Navicat远程连接
2019-04-30
java实现稀疏数组及将稀疏数组存入硬盘中
2019-04-30
2021-05-18
2019-04-30
Flutter 使用插件打开相册、相机
2019-04-30
libuv实现tcp代理服务器
2019-04-30
libuv使用不当导致的内存泄漏
2019-04-30
libuv实现ping包发送和接收
2019-04-30
基础架构系列篇-CENTOS7安装NGINX
2019-04-30
基础架构系列篇-系统centos7安装docker+COMPOSE
2019-04-30