Unity 的资源加载方式对比

静态引用

即在脚本中创建public变量或Serializable特性修饰的变量,然后在Inspector窗口中通过拖拽挂载到物体上;

优点

简单粗暴快捷,刚学Unity的时候就喜欢用这玩意orz

缺点

  • 只能是预先确定好的资源,不能运行时动态加载;
  • 不利于做内存与资源管理,静态引用的资源会在持有其引用的物体生成时一并加载到内存中,即便该资源没有被实例化;

动态加载

Resources

即将资源放在Resources文件夹下,加载时通过Resources.Load() 进行动态加载;

优点

  • 可以动态加载,也可以运行时动态卸载;

缺点

  • Resources文件夹下所有的资源在打包构建时都会被打入包中,即便该资源没有在任何地方被使用(Unity不知道是否有代码加载了该资源),导致包体变大,并且增加打包构建的时间;
  • 所有Resouces文件夹下的资源都会被打入一个单独的资源文件中,如果资源有变更就要重新构建打包,无法增量更新;

网上很多观点认为Resources会减慢游戏的启动时间,原因是”在游戏启动时,Unity引擎会为Resources文件夹下的资源建立一个查找树来存放与其对应的索引,便于后续资源的加载。一般来说,Resouces文件夹下资源数量越多,其构建时间越长,应用的启动也就越慢。“实际上这是老版本Unity中才有的问题,根据实际测试(以及一些愿意动手而不是直接得出结论的网友测试),新版本Unity并没有这个问题(也许不对,希望有更严谨全面的测试文章)。一些关于内存的观点也是在编辑器环境下测试得到的,并不严谨,甚至有人认为Unity会在启动时一股脑将Resources的东西全部加载到内存中(汗)。无论如何,商业项目不使用Resources更多的还是因为不符合项目利益,大项目必然要热更,而且一次打包这么多资源会浪费很多时间成本。

AssetBundle

即给资源分AB包,在运行时通过加载AB包的形式加载资源;

优点

  • 资源加载和内存管理方便,可以按需加载;
  • 可以增量更新;
  • 可以做首包拆分,玩家只需要下载较小的包体就可以进入游戏,后续内容在游玩时再下载;

缺点

  • 管理复杂,需要考虑AB包的加载卸载以及依赖问题;

Addressable

Unity官方提供的AB包管理策略,实则就是Unity对AssetBundle的一层封装,个人以及小体量团队没有能力自定义AssetBundle管理方案下的神;

优点

  • 好用!兼顾了AssetBundle的特性,又免去了繁杂的管理问题,只需要配置好AB包的内容直接加载就行,不过要注意每个资源有Load就有Release,因为Addressable是通过引用计数去判断卸载bundle的;

缺点

  • 性能上也许不如一些成熟或高度定制化的AB包解决方案(那我也做不出来啊)
  • 也许还不够稳定?
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇