每天一点UWA:加载模块深度解析

专题

  • 因为UWA上会对一些技术进行系列的专题讲解,而且文章并不连续,如果按照每周的形式就会割裂这些内容,因此针对这样的情况统一写成专题形式。

概述

  • 载模块中最为耗时的性能开销可以归结为以下几类:资源加载、资源卸载、Object的实例化和代码的序列化等。
  • 资源加载是加载模块中最为耗时的部分,其CPU开销在Unity引擎中主要体现在Loading.UpdatePreloading和Loading.ReadObject两项中。
  • Loading.UpdatePreloading,这一项仅在调用类似LoadLevel(Async)的接口处出现,主要负责卸载当前场景的资源,并且加载下一场景中的相关资源和序列化信息等。下一场景中,自身所拥有的GameObject和资源越多,其加载开销越大。
  • Loading.ReadObject,这一项记录的则是资源加载时的真正资源读取性能开销,基本上引擎的主流资源(纹理资源、网格资源、动画片段等等)读取均是通过该项来进行体现。可以说,这一项很大程度上决定了项目场景的切换效率。

每天一点UWA:第四周

AssetBundle

Resources.UnloadAsset仅能释放非GameObject和Component的资源,比如Texture、Mesh等真正的资源。对于由Prefab加载出来的Object或Component,则不能通过该函数来进行释放。

每天一点UWA:第三周

内存

资源复用

  • 如果一个prefab被简单的多复制几次,里面的mesh、Texture、AnimationClip、Material这些都是被复用的,在profile中可以看到。但是如果prefab从AssetBundle中获取,并且多次的加载、实例化、卸载可能造成内存泄漏,因为unload(false)并没有真正卸载内存中的已经实例化的prefab,再次load时PersistentManager会认为是一个新的对象。

每天一点UWA:第二周

内存

概述

  • 内存的开销无外乎以下三大部分:1.资源内存占用;2.引擎模块自身内存占用;3.托管堆内存占用。

资源内存

  • 大头在纹理,其次在网格、动画片段和音频。

每天一点UWA:第一周

初衷

  • 首先UWA一直以来都是一个我很喜欢的网站,因为他们在unity的优化方面是非常专业的,而且他们对于技术的分享也是毫不吝啬的。在他们的网站上有很多的技术文章,很久以来都想系统的阅读一遍,但是一直没有去做。这周开始下定决心要从第一篇开始,把UWA所有的技术分享文章读完,这个系列的文章会对每周读到的技术做一个总结,但是因为文章涉及的方向比较杂,因此会简单的用技术进行一个分类。

CPU方面的优化(很有用)

  • 就目前的Unity移动游戏而言,CPU方面的性能开销主要可归结为两大类:引擎模块性能开销和自身代码性能开销。其中,引擎模块中又可细致划分为渲染模块、动画模块、物理模块、UI模块、粒子系统、加载模块和GC调用等等。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×