Unity Animator卡顿研究

发表于2017-07-26
 点赞3 评论3

分享

分享到

2.3k浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏程序行业精英群

711501594

| 导语 资源池化是游戏项目中最常见的一种优化方式,具体做法是当资源不需要使用时,不直接释放而是回收到池中,等待下一次使用。对于unity游戏而言,回收的方式一般是SetActive,这么做已经回收的存量的资源就不会产生额外的消耗。但因为unity的一些“坑”,导致性能问题,我们需要换一种回收策略,也有了这篇Unity Animator卡顿研究。

在某一天,我们发现某个特效资源在使用时会有卡顿,通过Profile发现了下面这个坑

Animator组件在Enable时,需要重建内部数据,导致了异常的卡顿

对于这类问题,我们之前的做法是不用SetActive,而是使用SetLayer到不可见层来避免卡顿。但到底效率如何呢?为了避免同样的事情发生,针对游戏中常见的几个组件做了实验,实验的组件包括 Animator, Animation, ParticleSystem, MeshRenderer

(下面所有测试都在Meizu MX4 Pro上进行,Unity版本4.7.1)

我们在一个节点下创建了4个类型的gameobject,嵌套了一层同样的子节点

每帧分别setActive和setLayer(递归子节点)100次 结果如下

可以看到结论是,Animator的开关耗时很大,应该尽量避免

接下来尝试用setlayer解决

创建了50个英雄(用Animator的动作),用SetLayer的方式设置成Hide层(相机不渲染),CullingType是baseOnRender
Animator的Update平均有4-5ms的开销

这种情况下设置成AlwaysAnimate,曲线变抖了很多,平均有6-7ms开销

SetActive之后完全没有Animator.Update了

尝试去掉这个Update的消耗
试了几种办法:尝试Speed=0没有效果;尝试设置成到手动控制模式(StartPlayback),动作能停止但Update的消耗还在。
经过几次尝试后发现可以设置Animator的enable,又做了下面的实验:

首先测试Behaviour.Enable的性能

可以看到消耗比上面几种情况都要小得多

接下来拿英雄做实验
50个英雄SetActive=false的开销还是很明显的

SetLayer的效率高多了

但Animator.Update的开销还是很高


enable设置false之后Animator.Update没了

切换开销也较小

enable设置成true之后Animator.Update又回来了,切换开销也很小

故此,终于找一个可以两全的方法。

结论

对于Animator组件,应该尽量避免使用SetActive,改成SetLayer Behaviour.Enable=false的效率能好很多

建议: Unity的性能优化,实践很重要。Unity引擎提供API使用很简单也很给力,但内部的原理往往不得而知。为了减少使用API造成的不良影响,一方面可以通读代码,但更重要的是通过实践和Profiler,总结出更好的做法。

【转】Unity Animator卡顿研究的更多相关文章

  1. cocos2d-x android黑屏后返回游戏卡顿

    转自:http://blog.csdn.net/wolfking_2009/article/details/8824931 2013年5月17日更新:对于之前说的资源释放问题,cocos2d-x 2. ...

  2. [UI列表]LoopScrollRect无限滑动不卡顿

    应用场景 对于背包界面,排行榜列表,聊天消息,等有大量的UI列表的界面,常规做法是为每一条数据生成一个格子,在数据量越大的情况下,会生成越来越多的Gameobject,引起卡顿. 这篇文章讲述的就是解 ...

  3. bootsrtap h5 移动版页面 在苹果手机ios滑动上下拉动滚动卡顿问题解决方法

    bootsrtap h5 移动版页面 在苹果手机ios滑动上下拉动滚动卡顿问题解决方法 bootsrtap框架做的h5页面,在android手机下没有卡顿问题,在苹果手机就一直存在这问题,开始毫无头绪 ...

  4. 最纯粹的直播技术实战03-通过filter进行旋转及卡顿修复

    最纯粹的直播技术实战03-通过filter进行旋转及卡顿修复 最新实战教程,Android自己主动化刷量.作弊与防作弊,案例:刷友盟统计.批量注冊苹果帐号 这个系列的文章将会研究最纯粹的Android ...

  5. Unity3D_NGUI_性能优化实践_CPU卡顿

    http://gad.qq.com/college/articledetail/7083468 博尔特以9.58秒创造了百米世界纪录,假设他是跑酷游戏的角色,卡顿一帧就足以把冠军拱手让人. Unity ...

  6. Android 界面滑动卡顿分析与解决方案(入门)

    Android 界面滑动卡顿分析与解决方案(入门) 导致Android界面滑动卡顿主要有两个原因: 1.UI线程(main)有耗时操作 2.视图渲染时间过长,导致卡顿 目前只讲第1点,第二点相对比较复 ...

  7. Android TextView setText卡顿问题

    TextView 是经常使用控件之中的一个,最经常使用的方法是setText()  . 可是 我们在显示大量的文本的时候,使用setText还是会有一些性能的问题. 这篇文章 关于TextView的s ...

  8. 频繁GC会造成卡顿

    频繁GC会造成卡顿 https://www.cnblogs.com/qcloud1001/p/9525078.html 一款app除了要有令人惊叹的功能和令人发指交互之外,在性能上也应该追求丝滑的要求 ...

  9. android问题及其解决-优化listView卡顿和怎样禁用ListView的fling

    问题解决-优化listView卡顿和怎样禁用ListView的fling 前戏非常长,转载请保留出处:http://blog.csdn.net/u012123160/article/details/4 ...

随机推荐

  1. 2018.10.15 loj#6010. 「网络流 24 题」数字梯形(费用流)

    传送门 费用流经典题. 按照题目要求建边. 为了方便我将所有格子拆点,三种情况下容量分别为111,infinfinf,infinfinf,费用都为validi,jval_{id_{i,j}}valid ...

  2. 解决sea_born和matplotlib画图中文显示的问题

    #以下解决mtpl中文显示问题 from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] #以下解决seaborn中文编码报错问 ...

  3. MySQL 的IFNULL()、ISNULL()和NULLIF()函数

    参考与http://blog.csdn.net/xingyu0806/article/details/52080962 IFNULL(expr1,expr2) 假如expr1不为NULL,则 IFNU ...

  4. python 求第k个最大数

    #coding = utf-8 import sys def Cal_NO(a,b): nums=sorted(a,reverse=True) result=nums[b-1] return resu ...

  5. ILA用法

    Ila在使用过程中Capture mode可选, write_hw_ila_data 把从ILA中读出的数据写入文件中. Syntax write_hw_ila_data [-force] [-csv ...

  6. POP介绍与使用实践(快速上手动画)[转]

    前言 动画在APP开发过程中 大家多多少少都会接触到 而且随着ios7的扁平化风格启用之后 越来越多的APP开始尝试加入各种绚丽的动画交互效果以增加APP的用户体验(当然 还是以国外的APP居多) 有 ...

  7. Sensor Fusion-based Exploration in Home Environments using Information, Driving and Localization Gains(基于传感器融合的使用信息、驾驶和定位增益在家庭环境中的探索)

    Authors: Joong-Tae Park, Jae-Bok Song Department:Department  of  Mechanical  Engineering,  Korea  Un ...

  8. (深搜)Sum It Up -- poj --1564

    链接: http://poj.org/problem?id=1564 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88230#probl ...

  9. mysql的sql性能分析器

    MySQL 的SQL性能分析器主要用途是显示SQL执行的整个过程中各项资源的使用情况.分析器可以更好的展示出不良SQL的性能问题所在. mysql sql profile的使用方法 1.开启mysql ...

  10. Redis Sentinel基本介绍(翻译以及总结)

    目录 Redis Sentinel介绍 分布式的Redis Sentinel 快速开始 获取Sentinel 启动Sentinel 部署Sentinel的基本要求 配置Sentinel 其他的Sent ...