博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity中的刚体
阅读量:1983 次
发布时间:2019-04-27

本文共 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,所以一个有刚体的物体去碰撞一个没有刚体的物体会撞不动,一个没有刚体的物体去碰撞一个有刚体的物体会撞动

——两个物体能否发生碰撞

转载地址:http://rpyvf.baihongyu.com/

你可能感兴趣的文章
libuv使用不当导致的内存泄漏
查看>>
libuv实现ping包发送和接收
查看>>
基础架构系列篇-CENTOS7安装NGINX
查看>>
基础架构系列篇-系统centos7安装docker+COMPOSE
查看>>
基础架构系列篇-系统centos7中docker安装rabbitmq
查看>>
基础架构系列篇-NGINX部署VUE
查看>>
个人电商项目,基于uni-app+ springcloud +VUE技术
查看>>
基础架构系列篇-系统centos7安装kafka
查看>>
基础架构系列篇-系统centos7中docker安装分布式文件存储服务minio
查看>>
知识点记录-java判断系统是linux或windows
查看>>
知识点记录-springboot静态资源映射路径
查看>>
微服务springcloud2系列篇-配置与注册nacos组件
查看>>
用户权限设计-基于RBAC模型
查看>>
微服务springcloud2系列篇-网关GATEWAY跨域问题
查看>>
Java并发以及多线程基础
查看>>
软件质量的8个特性
查看>>
应届渣渣前端的艰难求职之路
查看>>
2021年不可错过的17种JS优化技巧(一)
查看>>
月薪15~20k的前端面试问什么?
查看>>
在 Vue 中用 Axios 异步请求API
查看>>