http://forum.china.unity3d.com/thread-25087-1-9.html

Unite Europe 2017的Keynote主题演讲中,我们为大家分享了将主机游戏《影子战术》现场移植到移动平台的过程,并分享了游戏针对移动平台进行的优化。今天这篇文章将为大家分享该游戏制作过程中总结的开发经验。

这其中的很多问题只有当你真正在制作主机游戏、手机游戏、或者处理巨量游戏内容时才会出现。如果在开发的早期就能把这些问题考虑进去,那么在开发过程中,你会更轻松,而你的游戏也会更炫酷。

Transform变化消息每当一个GameObject移动、旋转、缩放时,我们必须通知让每个与它相关的游戏系统。渲染、物理、以及该GameObject的每个父子物体,都需要被通知到,以匹配它做出的动作。随着游戏内容的增加,GameObject的数量也会暴涨,仅是发送这些消息的开销就会成为很大的性能问题。

以Unite Europe 2017上分享的项目 《影子战术》为例。

这是一个NPC以及它的所有组成部件。这张截图是他们使用Optimize Game Objects(优化游戏对象)选项,优化了骨骼绑定之后截取的。所以原始版本的NPC,除了所有的游戏对象和模型结构之外,还有NPC模型的所有骨骼。

 

这是一个很标准的游戏设计过程:关卡设计师设置NPC的生成对象。然后在运行时,这些生成对象会实例化一个NPC作为其子物体。Enemy_normal是NPC的根节点,它包含了用来控制NPC移动的NavAgent组件。每个NPC都有一堆的子物体来实现NPC的各个功能。这些看起来没有任何问题。

但这意味着,在每一帧,当NPC移动的时候,它必须通知这个NPC的所有子物体,告诉它们根节点的transform已经发生了变化。每一帧,每一个NPC都会发送成百上千的transform变化消息,占用大量的帧处理时间。

我们在发现Transform变化消息消耗大量帧时间的问题后,与Mimimi Productions进行了讨论,他们将NPC的生成方式做了简化处理。除了使用Optimize Game Objects之外,他们开始在场景的根节点下生成NPC,并把NPC能力相关的游戏对象都移到NPC的根节点上,使它们不会成为NavAgent组件的子对象。这样Nav Agent下面只剩下NPC的视觉与物理组件。优化过后,在他们的目标硬件平台上的帧率提高了10帧左右。

重要的事,多说几遍:

每秒钟提升了10帧!10帧!帧!

没有影响工作流程。无需返工重做大量的工作。仅仅是在他们现有的内容上做了一点改动。

 

Transform变化分发

从Unity 5.4开始,我们一直在尽最大努力优化所有与transform和Transform变化消息相关的代码。我们已经优化了内存布局并提供了.SetPositionAndRotation API来避免没有特定关联的改变。我们现在允许向系统注册某个特定的transform,而不是向引擎中的每个系统都广播Transform变化消息。

正在进行中的一个巨大改变是,我们将逐步迁移到一个延迟多线程TransformChangeDispatch系统。这让我们可以将所有的Transform 变化消息形成独立的队列,并在主线程之外对它们进行解析。我们正对尽可能多的系统进行迁移,分发这些通知,而不是让它们在主线程上进行同步处理。

即使有了这些改进,在开发游戏时你仍要好好考虑你的层级结构。这样能帮你节约帧执行时间,为你的玩家提供更好的游戏体验。

层级结构指南

如果有东西每一帧都会移动,确保它所有的子物体都确实需要了解位置信息。只有渲染、物理、音频或者类似的核心系统才应该出现。

在运行时动态创建的游戏对象,如果它们没有必要作为出生点对象的子物体,那就放在场景的根节点下。

你可以很方便的注册自己生成的所有内容,并通过OnEnable 和OnDisable来向它们传递出生点对象的ActiveInHeirarchy状态。

尝试将需要移动的物体进行分组,大约每个根节点50个左右的GameObject。这样,底层系统可以将你的TransformChangeDispatch任务按照每线程最优数量进行分组。可避免出现线程过于繁忙或过于空闲的情况。

结语

感谢Mimimi Productions让我们使用《影子战术》作为范例。我们还将为大家分享游戏开发相关的全局光照和多场景编辑的经验与教训,请保持关注!

Unite Europe案例项目《影子战术》层级优化经验分享的更多相关文章

  1. Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理

    Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理 2017年01月04日 08:52:12 阅读数:18366 基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB ...

  2. Unity MMORPG游戏优化经验分享

    https://mp.weixin.qq.com/s/thGF2WVUkIQYQDrz5DISxA 今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORP ...

  3. 项目优化经验分享(八)TeamLeader经验总结

    引言 通过前面的七篇博客.我把自己在项目优化过程的经验进行了分享,今天这篇博客,作为一个总结,就来讲讲作为一个TeamLeader,在项目管理中遇到的问题和解决经验! 正文 问题一:团队之间怎么沟通? ...

  4. 项目优化经验分享(六)SVN冲突和处理

    上一篇博客我们分享了新增需求的确定思想<站在全局看问题>.今天我们来分享项目开发中SVN冲突的解决经验:SVN冲突和处理! 引言 开发过项目的人都知道,公司开发一个项目都会使用到版本号控制 ...

  5. C#.NET 大型企业信息化系统 - 防黑客攻击 - SSO系统加固优化经验分享

    好久没写文章了,突然间也不知道写什么好了一样,好多人可能以为我死了,写个文章分享一下.证明一下自己还在,很好的活着吧,刷个存在感. 放弃了很多娱乐.休闲.旅游.写文章.看书.陪伴家人,静心默默的用了接 ...

  6. Unity技术支持团队性能优化经验分享

    https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247490321&idx=1&sn=f9f34407ee5c5d ...

  7. Web前端性能优化经验分享

    最近一直有给新同学做前端方面的培训,也有去参与公司前端的招聘,所以把自己资料库里面很多高效且有用的知识做了些 规整分类,然后再分享一篇关于前端优化方面的总结.而且春节一过就又是招聘的高峰期了,在校的. ...

  8. Go程序GC优化经验分享

    http://1234n.com/?post/yzsrwa 最近一段时间对<仙侠道>的服务端进行了一系列针对GC的调优,这里跟各位分享一下调优的经验. 游戏第一次上线的时候,大部分精力都投 ...

  9. 使用Jquery+EasyUI 进行框架项目开发案例讲解之四 组织机构管理源码分享

    http://www.cnblogs.com/huyong/p/3404647.html 在上三篇文章  <使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享> ...

随机推荐

  1. Pentaho BIServer Community Edtion 6.1 使用教程 第四篇 安装和使用Saiku 插件 进行 OLAP

    OLAP(On-Line Analytical Processing,联机分析处理)是一个使分析师.管理者和执行者从原始数据中用来快速.一致.交互访问的一种软件技术,从而真实的反映企业的数据情况.OL ...

  2. API的理解和使用——全局命令

    全局命令 命令 功能 set 创建键值对 keys 遍历查看所有键 exists 判断一个键是否存在,1存在,0不存在 dbsize 当前数据库中有多少个键 del 删除一个或多个键 expire 设 ...

  3. selenium WebDriverException: Message: unknown error: DevToolsActivePort file doesnt exist

    在centos中使用无头chrome报以下错误 selenium.common.exceptions.WebDriverException: Message: unknown error: DevTo ...

  4. [2018-12-07]用ABP入门DDD

    前言 ABP框架一直以来都是用DDD(领域驱动设计)作为宣传点之一.但是用过ABP的人都知道,ABP并不是一个严格遵循DDD的开发框架,又或者说,它并没有完整实现DDD的所有概念. 但是反过来说,认真 ...

  5. HDU4511 小明系列故事——女友的考验 —— AC自动机 + DP

    题目链接:https://vjudge.net/problem/HDU-4511 小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others)    Memor ...

  6. 51nod 1610

    题目 神犇题解 所以说鄙人的姿势水平完全不够啊OTZ. 很naive的想法是O(T*v*m)的,据说卡一卡可以过去.题目要求的东西其实是这个: $ \sum\limits_{i = 1}^v {\mu ...

  7. navicat for mysql 安装

    直接上正题,用于记录 1.下载linux版本的navicat:http://www.navicat.com/download/navicat-for-mysql 2.解压 tar -vzxf navi ...

  8. hdu-5793 A Boring Question(二项式定理)

    题目链接: A Boring Question Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java ...

  9. JXL 的API

    使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事.在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来 ...

  10. 1076 Forwards on Weibo (30)(30 分)

    Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may ...