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.08.06 bzoj1503: [NOI2004]郁闷的出纳员(非旋treap)

    传送门 平衡树简单题. 直接用fhgtreap实现分裂和合并就没了. 代码: #include<bits/stdc++.h> #define N 100005 using namespac ...

  2. C语言之预处理命令与用typedef命名已有类型

    预处理命令 主要是改进程序设计环境,以提高编程效率,不属于c语言本身的组成部分,不能直接对它们进行编译,必须在对 程序编译之前,先对程序中的这些特殊命令进行“预处理”.比如头文件. 有以下三类:宏定义 ...

  3. mysql 经典错误解决方案 :Incorrect string value 'xE6x95x85xE4xBAx8B...' for column

    1.关闭当前服务器2.删除正在使用的数据库drop database 数据库名字;3.查看字符集, SHOW VARIABLES LIKE 'character_set_%'; 把所有latin1的都 ...

  4. PhotoModeler Scanner教程

    Marking and Referencing 标记和校正 标记和校正是通过多张照片人工匹配共同特征的过程.点击一张图片的明显视觉特征,然后将它匹配到不同角度拍摄的其他图片的相同特征上. Approp ...

  5. 面向对象编程思想(前传)--你必须知道的javascript(转载)

    原文地址:http://www.cnblogs.com/zhaopei/p/6623460.html阅读目录   什么是鸭子类型 javascript的面向对象 封装 继承 多态 原型 this指向 ...

  6. Windows Phone 放开政策 - 应用内支付(IAP)可加入三方支付

    Windows Phone 应用商店在 今年(2013)11月04号 修改了商店政策 允许公司账户的应用使用三方支付SDK. 通过 App certification requirements cha ...

  7. Microsoft SQL Server 2012 管理 (2): Auditing

    -- Demostratin 2A (Using SQL Server Audit) -- Step 1: Use the master database USE master; GO -- Step ...

  8. vim 安装vim-javascript插件--Vundle管理

    最近看了一下node.js,但是写的时候,vim对js没有很好的提示.于是就安装插件来处理,准备安装vim-javascript.但是安装github上面的插件时,推荐用Vundle和pathogen ...

  9. [ACM_水题] UVA 12502 Three Families [2人干3人的活后分钱,水]

      Three Families  Three families share a garden. They usually clean the garden together at the end o ...

  10. DBCC--常用跟踪标记

    使用DBCC TRACEON 和DBCC TRACEOFF来打开和关闭跟踪标记 使用DBCC TRACESTATUS来查看所有打开的跟踪标记 --260:打印关于扩展存储过程动态链接库的版本信息 -- ...