目录

优化

脚本优化

脚本视锥剔除和协同例程

智能内存管理

缓存频繁使用的对象和组件

使用 Unity 物理系统的最佳实践

禁用完全透明对象

返回至教程第 1 部分:

面向英特尔 x86 平台的 Unity* 优化指南: 第 1 部分

优化

在本指南中,我们将研究优化的两个主要方面:脚本和基于编辑器。您将看到许多基于其运行所在根的各个优化的具体信息。

脚本优化

脚本视锥剔除和协同例程

当您正在分析您的应用并发现无需每帧调用脚本的 Update() 功能时,您可使用几大方法减少更新量:

脚本视锥剔除

使用以下 Monobehavior 回调功能剔除在焦点未对准时无需更新的摄像头视锥以外的脚本。

图 12.当采用脚本的对象离开/进入摄像头视锥时,Monobehavior 回调功能触发

协同例程

本质上,协同例程功能可暂停并恢复执行。 在删除脚本中的原始 Update() 功能并将其替换为协同例程后,您就能够利用这一功能。 然后,您可通过yield命令对想要多久执行一次协同例程进行设置。 这一片段显示了如何创建每 2 秒调用一次的定制智能更新,而非使用每帧调用一次的默认设置:

图 13.通过协同例程实现更高效的更新

智能内存管理

如果您正在寻找一些优化内存使用的方法,那么首先检查 Unity 分析器会很有帮助。 大概了解您管理内存方式的绝佳方法是检查 Overview 窗口的“GC Alloc”部分(图 14),并单步调试帧,直到您看到有效分配。

图 14.通过连续检查多个帧,您可确定 GC 发生和调整的时间

此外,检查调用垃圾收集的频率也会有所帮助。 若要做到这一点,需隔离“CPU Usage”子分析器中的 GarbageCollector 字段(图 15):

图 15.GC 发生时 CPU Usage 中确定的点

然后在显示收集时,您可单击图表中的峰值,并寻找对 GC.Collect 的调用(图 16)。 通过这种方式,您能够了解每次收集所用的时间:

图 16.有关 GC 的统计数字

为了避免频繁分配,最好使用结构,而非类别,在堆栈上完成分配,而非堆中。 多个至堆的分配将导致出现大量内存碎片和频繁的垃圾收集。

缓存频繁使用的对象和组件

一般来说,您应分析您的应用,以找到使用最频繁的游戏对象和组件,并确保将这些值进行高速缓存。每个您看到的获取对象场景都是一次进行高速缓存和减少不必要计算的良机。

相同的规则也适用于游戏对象实例化。 通常,实例化是应当避免的速度相对较慢的调用。如果在每个场景中反复创建并销毁同一对象类型,那么最好保存一份相关对象清单,以在对象管理器脚本中重复使用。

Unity 建议您使用一个中央游戏管理器保存所有缓存的游戏对象清单。在应用这一技巧后,您可采纳以下代码片段,通过切换状态按钮或其他控制机制比较两种方法之间是否存在性能提升,同时实时查看CPU Usage 分析器。 下面是显示使用差异的片段(图 14):

图 17.使用 STATE 切换对象

使用 Unity 物理系统的最佳实践

在处理 Unity 中的动态对象时,需避免一些熟知的优化和陷阱。 无论您计划自己迁移对象,还是让 Unity 控制物理对象,您都需要将Rigidbody组件添加至您的对象, 从而告知 Unity 物理系统该对象具有可迁移性。 当您想要手动迁移对象时,只需勾选isKinematic标记即可(图 18)。此外,您还需要确保并未勾选 inspector 右上角面向该对象的static 复选框(图 19)。

图 18.勾选 isKinematic,以完全控制对象迁移

图 19.未勾选 Static 属性,以免动态对象进入静态集

为了确保您在应用中恰当处理动态对象,请打开分析器、隔离CPU Profilerphysics部分、突出显示位于物理时间步长的帧(默认每秒更新 24 次),并确认您并未在 overview 窗口的对象 FixedUpdate() 调用下看到任何“Static Collider.Move(昂贵的延误成本)”条目(图 20)。 Static Collider.Move 消息的缺少表示本部分中的物理系统正常运行。

图 20.当您未正确管理动态对象时,Static Collider.Move(昂贵的延误成本)就会出现

禁用完全透明对象

对于在“淡出”渲染模式下使用材料的对象,或任何可变成完全透明的对象,如果其完全透明,那么必须确保将面向该对象的MeshRenderer组件设置为禁用。这些对象将始终在绘制调用中进行分派,无论 alpha 值如何。例如,开发人员有时使用全屏四边形在事件触发时绘制脉冲输入和输出的损害指标或装饰图案效果。您需要了解当对象完全透明时引擎本身并未跟踪,如果不注意的话,就会造成资源浪费。以下是在同一场景中截取的截图,唯一不同之处在于前景中半透明对象的 alpha 值。

图 21.捕获相应 GPA 帧的5 个半透明平面。 半透明对象可见,并在 2,657.5 微秒内占据 37.4% 的场景。

图 22.5 个之前提及已将其材料的 alpha 值设置为 0 的平面。相应 GPA 帧捕获显示 GPU 仍然执行了绘制命令。这些图画在 2,316.5 微秒内占据 32.1% 的场景。

为了确保您并未分派不必要的绘制调用,您始终需要尽可能地检查与您潜在透明对象相关的 alpha 值。对于基于颜色渲染的简单材料,只需按照以下代码片段使用机制。

图 23.当编辑对象透明度时,请始终检查其是否可见,如有必要节省资源,则需将其禁用。

Unity3d面向英特尔 x86 平台的 Unity* 优化指南: 第 2 部分相关推荐

  1. Unity3d面向英特尔® x86 平台的 Unity* 优化指南: 第 3 部分

    目录 编辑器优化 遮挡剔除 LOD:细节级别 阴影 使用一个摄像头 渲染队列排序 光照贴图 针对复杂模型,使用简单的碰撞器代替网格碰撞器 返回至第 2 部分教程: 面向英特尔® x86 平台的 Uni ...

  2. unity android x86,Unity3d面向英特尔 x86 平台的 Unity* 优化指南: 第 4 部分

    目录 返回至教程第 3 部分: 不必要的高分辨率纹理很容易成为移动游戏中的瓶颈,造成硬件效率降低. 因此,您不仅需要确认场景中所用纹理是否采用压缩格式,而且还需要核实您已经选中 Generate Mi ...

  3. 需要编写支持英特尔 x86 的 Android* 游戏应用? 此处的样本可为您提供帮助!

    作者:Tao Wang 随着越来越多搭载 Intel Inside ® 的智能手机在全球范围内普及以及英特尔安卓系统映像(Ginger Bread.ICS 以及 Jelly Bean 4.1 和 4. ...

  4. 在英特尔® 架构平台上开发和优化基于 NDK 的 Android 游戏应用

    作者:杜伟 Android 原生开发套件 (NDK) 是 Android SDK 的附带工具.借助该工具,您可以使用诸如 C 和 C++ 等本地代码语言实现部分应用. 您可以从以下网址下载该 NDK ...

  5. 怎么禁用计算机的可信执行,英特尔®融合安全和管理引擎、英特尔®服务器平台服务、英特尔®可信执行引擎和英特尔®主动管理技术咨询 (intela-sa-00185)...

    你能给我一个英特尔 sa-00185 的简短摘要吗? 英特尔®融合安全和管理引擎 (英特尔®csc).英特尔®服务器平台服务(英特尔®sms).英特尔® 可信执行引擎 和英特尔®主动管理中的多个潜在安 ...

  6. 苹果 M1带起ARM,英特尔 x86 霸主地位遭威胁

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 提问:今年双十一你"剁手"-不是,你知道是什么日子吗?答:苹果 M1 一周年了! 还记得去年 11 月 11 日,苹 ...

  7. 英特尔多核平台编码优化大赛就顺便试试身手了

    这段正好在看<并行编程模式>这本书,看见英特尔多核平台编码优化大赛就顺便试试身手了,由于本人对汇编不熟,intel的编译器和工具以是临时抱佛脚,所以比起其他高手应该还差得多了,所以只将重点 ...

  8. 英特尔核显驱动hd630_秒速开机快如闪电 英特尔EVO平台惹人爱!

    [PConline 杂谈]随着数字生活的理念日渐深入人心,通过使用电子设备来提高自己生产力与生产效率的人们成为了如今战斗在社会发展前端的精英,电子与光子飞速地运转下,我们的世界发生了翻天覆地的变化,网 ...

  9. 英特尔530和535哪个好_2020年终好物推荐,英特尔Evo平台认证更出彩

    英特尔Evo平台是基于英特尔的创新计划(代号雅典娜计划)的笔记本电脑产品系列,采用第11代智能英特尔酷睿处理器,搭载英特尔锐炬Xe 显卡,拥有更好的外观.更强的性能与便携性,以及雅典娜计划认证的续航能 ...

最新文章

  1. OpenCL框架与示例
  2. node mysql 连接池 超时,关于NodeJS中mysql连接池卡死问题
  3. JavaScript--正则表达式
  4. (常用API)正则表达式练习和相关的String类方法
  5. CATransform3D 特效详解
  6. Deformable 3D shape registration based on local similarity transforms
  7. 使用Idea部署SSM项目后,访问路径为url:8080/项目名_war_exploded的解决方案
  8. Mediacoder基本教程
  9. python安装pyaudio
  10. hdu2037-简单dp
  11. 计算机应用程序没声音怎么办,电脑没声音怎么办
  12. 说白了那就是在一个池里放些亲亲鱼
  13. flappy bird java源码_Java实现Flappy Bird游戏源码
  14. openlayers实现地图显示功能
  15. ROS中Remap标签详解,举例说明其两种用法
  16. fx3u4ad一adp说明书_FX3U-4AD-ADP使用案例三菱FX3U-4AD-ADP硬件手册 - 广州正凌
  17. 有意思的hand-crafted features based IQA的论文吧(图像质量评价)
  18. 计算机网络dna,DNA计算
  19. python supervisor 检测代码变动重启_supervisor更改某项目配置后 需要重新启动才有效...
  20. 有哪些高质量的自学网站?

热门文章

  1. NGINX 发布影响LDAP 实现的0day 缓解措施
  2. 施乐悄悄修复影响某些打印机中的严重缺陷
  3. Zoho:尽快修复已遭利用的 ManageEngine 严重漏洞
  4. 俄罗斯网络间谍被指攻击斯洛伐克政府长达数月
  5. python 基础语法学习笔记(2019年4月第二周学习笔记)
  6. Edge 浏览器有秘密白名单,允许 Facebook 运行 Flash 代码
  7. HTTP2.0,HTTP1.1,HTTP1.0三者在通性性能上的优化方法
  8. 前端存储 (2) - sessionStorage ,localStorage
  9. 编程中的那些容易迷糊的小知识
  10. 微软物联网平台再推新!