Unity最佳实践-物理计算
Unity最佳实践-物理计算
英文原文:https://unity3d.com/cn/learn/tutorials/topics/physics/physics-best-practices
层次(Layer)和层次碰撞矩阵(Layer Collision Matrix)
所有新建的GameObject默认处于 Default
层,该层中的所有物体都可以相互碰撞,这样会比较消耗性能。
应该为不同类型的GameObject设置不同的层,来设定哪些GameObject之间可以发生碰撞。
新添加的层默认设置为可与所以已存在的层发生碰撞,要在碰撞矩阵中去掉不必要的碰撞关系,以减少碰撞监听和碰撞事件。
碰撞矩阵界面位于 Edit-Project Settings-Physics : Layer Collision Matrix。
射线(Raycasts)
射线比较消耗性能,其性能开销与射线的长度和场景中的碰撞器(Collider)的类型关系密切。
下面列出一些优化射线性能的提示:
- 尽量减少射线的数量。
- 射线的长度够用即可。射线越长,引擎要检测的对象就越多。
- 不要在
FixedUpdate()
中使用射线,也尽量不要在Update()
中使用射线。 - 注意射线所检测的碰撞器的类型,MeshCollider 的射线处理性能开销非常大。
- 对于具有复杂网格的物体,一个比较好的解决方案是为其创建多个带有基础碰撞器的子对象,然后调整子对象碰撞器的形状到与父物体相近。
- 若确实需要使用MeshCollider,尽量将其设置为
convex
。
- 明确射线需要与哪些层发生碰撞,尽量在射线方法中使用层次遮罩。
- 射线方法中的
layerMask
参数用于设置层次遮罩,它是位掩码而不是层id。 - 要设置射线只与第10层(层id为10)的物体发生碰撞,layerMask参数应该为
1<<10
。 - 要设置射线不与第10层的物体发生碰撞,layerMask参数应该为
~(1<<10)
,不能省略括号。 - 可以通过
LayerMask.NameToLayer("LayerName")
方法获取层的id。 - 示例1:
Physics.Raycast(ray, out hit, 1 << 10)
。 - 示例2:
Physics.Raycast(ray, out hit, ~(1 << 10))
。
- 射线方法中的
刚体(Rigidbody)
刚体是在对象间进行物理交互所必须的组件,即使是只将碰撞器作为触发器(Tigger),也应该为对象添加刚体组件,这样可以确保 OnTrigger
事件正常工作。
当多个对象具有层级关系且子对象具有碰撞器时,只需在最外层的父对象上添加一个刚体即可,无需为每个子对象添加刚体。
不带有刚体的碰撞器对象会被引擎认为是 静态碰撞器(Static Collider)。要避免移动静态碰撞器对象,这一操作开销很大,因为这会导致引擎重新计算整个场景的物理数据。
Profile 窗口的 CPU Profile 栏会在移动静态碰撞器时输出警告(warning)。
这里我在Unity 5.6.3和Unity 2018.1.0中做了下测试,感觉反而是加了刚体之后每帧耗时增加了,Profile中也没看到警告,不知道是Unity内部做了升级还是我哪里没设置好,如果有人懂这里的改动,希望能给讲解一下!
Fixed时间步长(Fixed Timestep)
在时间管理器(Time Manager)中调整 Fixed Timestep
会直接影响到 FixedUpdate()
和 物理计算
的更新频率,通过更改该值来在物理计算精度和CPU消耗中寻求平衡。时间管理器界面位于 Edit-Project Settings-Time : Time Manager。
Unity最佳实践-物理计算相关推荐
- Unity最佳实践-场景照明
Unity最佳实践-场景照明 英文原文:https://unity3d.com/cn/learn/tutorials/topics/best-practices/auto-generate-and-g ...
- DB2 Workload Management 工作负载管理最佳实践
转自:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0912db2workloadm/index.html 概要介 ...
- 阿里云弹性计算产品总监王志坤:在分布式云领域的产品布局和最佳实践
近日,2022 年全球分布式云大会北京站顺利举办,阿里云弹性计算产品总监王志坤在主论坛上发表了主题为<强劲可靠.无处不在的云,助力企业云上业务创新>的演讲,为大家详细阐述了阿里云在分布式云 ...
- 基于函数计算的游戏打包最佳实践
简介:本文主要介绍了通过Serverless工作流(FNF)+ 函数计算(FC)+ 对象存储(OSS)+ 日志服务(SLS)的组合方案,实现游戏发行过程中,自动化.并行化的一键式构建游戏渠道包.同时也 ...
- 玩转ECS第5讲 | 弹性计算安全组最佳实践及新特性介绍
简介:本次内容由阿里云智能技术专家王帝(丞浩)为大家介绍如何正确使用安全组.最佳实践以及新特性:详细了解安全组为何是云端的虚拟防火墙,以及为何是重要的网络隔离手段. 演讲嘉宾简介:王帝(丞浩),阿里云 ...
- arcore之路-unity开发从入门到实践_Unity游戏开发——单例模式的最佳实践
0.前言 StarryFun:Unity游戏开发--关于单例模式的理解zhuanlan.zhihu.com 之前一篇文章讲了单例模式的简单理解,自知其中有很多不严谨的地方,由于本萌新也是在学习阶段, ...
- 【云栖计算之旅】线下沙龙第2期精彩预告:Docker在云平台上的最佳实践
Docker是一个开源的应用容器引擎,提供了一种在安全.可重复的环境中自动部署软件的方式,允许开发者将他们的应用和依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化 ...
- Flink on Zeppelin 流计算处理最佳实践
简介: 欢迎钉钉扫描文章底部二维码进入 EMR Studio 用户交流群 直接和讲师交流讨论~ 点击以下链接直接观看直播回放:https://developer.aliyun.com/live/247 ...
- 实时计算 Flink 版 最佳实践
简介: 实时计算 Flink 版 最佳实践目录 金融行业 行业背景 金融是现代经济的核心.我国金融业在市场化改革和对外开放中不断发展,金融总量大幅增长.金融稳定直接关系到国家经济发展的前途和命运,金融 ...
最新文章
- vue引入vue-amap
- Android Studio提示忽略大小写
- java 删除二进制内容_从二进制矩阵中仅删除一个元素的行/列
- C语言满分:L1-061 新胖子公式 (10分)
- (上)挖掘传统行业日志大数据的无限价值
- servlet核心API的UML图
- C#格式化字符串净化代码的方法
- 无法连接NVIDIA驱动:NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver
- Spring--超简单利用quartz实现定时作业
- Ubuntu最佳字体推荐
- 上海计算机应用基础自考上机,上海市自学考试公共实践课程《计算机应用基础(实践)》上机考核大纲_自考资讯自考_自考报名_中国教育在线...
- 一起学JAVA 接口 面向接口开发
- 分区表怎么修复【转】
- 文件夹删除不掉-需要管理员权限删除
- 如何复位———异步复位,同步释放的方式,而且复位信号低电平有效(转)
- ireport分组打印
- 丁磊一份隔着万水千山的爱情
- 安装Xcode的方法
- Verilog中always与assign详解
- 破解并修复VoLTE:利用隐藏的数据通道和错误的实现方式
热门文章
- 微信小程序与低功耗蓝牙通信-接受硬件端发送来的数据(四)
- 无穷大 计算机语言,数值编程语言能区分“最大有限数”和“无穷大”吗?
- 汉字转拼音 pinyin4j 字符串 MD
- 企业大数据在平安科技信用风险管理的应用实践
- Token登录原理分析
- 单片机连接有人云上传数据
- Android中隐藏底部导航栏NavigationBar,以及修改NavigationBar按键颜色及NavigationBar背景颜色。
- ubuntu 源码编译libtorch
- # 160_技巧_Power BI 新函数-计算工作日天数
- matlab/simulink电力电子仿真三相可编程电压源three phase programmable voltage source的设置与使用