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. yii框架场景的用法

    1.在 model 里面定义一下场景 类名必须是 scenarios() public function scenarios() { return [ 'create' => ['title', ...

  2. C++之类和对象的使用(二)

    析构函数 析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一系列清理工作,使这部分内存可以被程序分配给新对象使用.对象生命周期结束,程序就自动执行析构函数来完成这些工作. 析构函数是一种 ...

  3. 创建template模板

    创建一个自己常用的快捷键的模板. 1.选择window-->preferrence--搜索temp--java 2.点击new 3.根据自己的习惯起一个名字 4.比如syso 5.语法不会,就找 ...

  4. WriteableBitmap(三) 扩展

    backbuffer使用您在创建WriteableBitmap时指定的像素格式,还有一个BackBufferStride属性,您可以使用它来创建一个合适的存储映射函数. 添加一些方法来设置和获取特定情 ...

  5. U盘单个文件最大4G限制问题

    1.不同文件系统的最大分区以及单个文件最大限制 FAT32单个文件最大不能超过4G,超过4G就不能读取了. NTFS(Windows):支持最大分区2TB,最大文件2TB FAT16(Windows) ...

  6. 初探FFT(快速傅里叶变换)

    第一次接触省选的知识点呢!zrf大佬在课堂上讲的非常清楚,但由于本蒟蒻实在太菜了,直接掉线了.今天赶紧恶补一下. 那么这篇博客将分为两块,第一块是FFT的推导和实现,第二块则是FFT在OI上的应用 因 ...

  7. SQL SERVER存储过程中使用事务与捕获异常

    https://www.douban.com/note/559596669/ 格式类似于 CREATE PROCEDURE YourProcedure ASBEGIN    SET NOCOUNT O ...

  8. Android sdcard文件读写操作

    这次演示以,安卓原生操作系统 Nexus_6手机进行操作: AndroidManifest.xml配置相关权限: <!-- 增加权限 --> <uses-permission and ...

  9. 为MAC配置终端环境iTerm2+Zsh+oh-my-zsh

    首先展示下我的终端吧. 这就是我们为什么要配置iTerm2+Zsh+oh-my-zsh环境的原因: 我们使用zsh解释器,当然等你使用 zsh时就会知道zsh与bash对比的强大之处了. 至于我们的g ...

  10. navicat远程连接oracle

    本机没有oracle,这个软件太大了. 想要远程连接oracle,本地不安装oracle的话是不行的,我们安装一个oracle instance client,然后配置navicat就ok了. 下载i ...