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最佳实践-物理计算相关推荐

  1. Unity最佳实践-场景照明

    Unity最佳实践-场景照明 英文原文:https://unity3d.com/cn/learn/tutorials/topics/best-practices/auto-generate-and-g ...

  2. DB2 Workload Management 工作负载管理最佳实践

    转自:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0912db2workloadm/index.html 概要介 ...

  3. 阿里云弹性计算产品总监王志坤:在分布式云领域的产品布局和最佳实践

    近日,2022 年全球分布式云大会北京站顺利举办,阿里云弹性计算产品总监王志坤在主论坛上发表了主题为<强劲可靠.无处不在的云,助力企业云上业务创新>的演讲,为大家详细阐述了阿里云在分布式云 ...

  4. 基于函数计算的游戏打包最佳实践

    简介:本文主要介绍了通过Serverless工作流(FNF)+ 函数计算(FC)+ 对象存储(OSS)+ 日志服务(SLS)的组合方案,实现游戏发行过程中,自动化.并行化的一键式构建游戏渠道包.同时也 ...

  5. 玩转ECS第5讲 | 弹性计算安全组最佳实践及新特性介绍

    简介:本次内容由阿里云智能技术专家王帝(丞浩)为大家介绍如何正确使用安全组.最佳实践以及新特性:详细了解安全组为何是云端的虚拟防火墙,以及为何是重要的网络隔离手段. 演讲嘉宾简介:王帝(丞浩),阿里云 ...

  6. arcore之路-unity开发从入门到实践_Unity游戏开发——单例模式的最佳实践

    0.前言 StarryFun:Unity游戏开发--关于单例模式的理解​zhuanlan.zhihu.com 之前一篇文章讲了单例模式的简单理解,自知其中有很多不严谨的地方,由于本萌新也是在学习阶段, ...

  7. 【云栖计算之旅】线下沙龙第2期精彩预告:Docker在云平台上的最佳实践

    Docker是一个开源的应用容器引擎,提供了一种在安全.可重复的环境中自动部署软件的方式,允许开发者将他们的应用和依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化 ...

  8. Flink on Zeppelin 流计算处理最佳实践

    简介: 欢迎钉钉扫描文章底部二维码进入 EMR Studio 用户交流群 直接和讲师交流讨论~ 点击以下链接直接观看直播回放:https://developer.aliyun.com/live/247 ...

  9. 实时计算 Flink 版 最佳实践

    简介: 实时计算 Flink 版 最佳实践目录 金融行业 行业背景 金融是现代经济的核心.我国金融业在市场化改革和对外开放中不断发展,金融总量大幅增长.金融稳定直接关系到国家经济发展的前途和命运,金融 ...

最新文章

  1. vue引入vue-amap
  2. Android Studio提示忽略大小写
  3. java 删除二进制内容_从二进制矩阵中仅删除一个元素的行/列
  4. C语言满分:L1-061 新胖子公式 (10分)
  5. (上)挖掘传统行业日志大数据的无限价值
  6. servlet核心API的UML图
  7. C#格式化字符串净化代码的方法
  8. 无法连接NVIDIA驱动:NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver
  9. Spring--超简单利用quartz实现定时作业
  10. Ubuntu最佳字体推荐
  11. 上海计算机应用基础自考上机,上海市自学考试公共实践课程《计算机应用基础(实践)》上机考核大纲_自考资讯自考_自考报名_中国教育在线...
  12. 一起学JAVA 接口 面向接口开发
  13. 分区表怎么修复【转】
  14. 文件夹删除不掉-需要管理员权限删除
  15. 如何复位———异步复位,同步释放的方式,而且复位信号低电平有效(转)
  16. ireport分组打印
  17. 丁磊一份隔着万水千山的爱情
  18. 安装Xcode的方法
  19. Verilog中always与assign详解
  20. 破解并修复VoLTE:利用隐藏的数据通道和错误的实现方式

热门文章

  1. 微信小程序与低功耗蓝牙通信-接受硬件端发送来的数据(四)
  2. 无穷大 计算机语言,数值编程语言能区分“最大有限数”和“无穷大”吗?
  3. 汉字转拼音 pinyin4j 字符串 MD
  4. 企业大数据在平安科技信用风险管理的应用实践
  5. Token登录原理分析
  6. 单片机连接有人云上传数据
  7. Android中隐藏底部导航栏NavigationBar,以及修改NavigationBar按键颜色及NavigationBar背景颜色。
  8. ubuntu 源码编译libtorch
  9. # 160_技巧_Power BI 新函数-计算工作日天数
  10. matlab/simulink电力电子仿真三相可编程电压源three phase programmable voltage source的设置与使用