Unity热更新(一) 资源介绍

发表于2016-07-06
评论0 4.3k浏览
       Assets目录下存放着unity工程的所有资源,包括编辑器资源和运行时资源。常见的资源类型包括:场景,预制,模型,动画,纹理,音效,材质,文本,代码等,其中预制是unity中比较特殊的资源,预制可以认为是以yaml格式序列化的GameObject资源,预制可以是复杂GameObject对象的组合,便于我们复用和加载。这些资源“几乎”可以放在Assets下的任何目录(有几个特殊目录会在下文介绍)中,但unity却有一套管理资源的规则,区别于编辑期开发和运行时打包。

Assets下的几个特殊目录
      Resources:逻辑资源目录,这个目录中的资源会打入到包中,且允许程序通过Resources类进行加载,常见操作包括Resources.Load(string path),Resources.LoadAsync(string path),加载时参数path不需要资源后缀。
StreamingAssets:Raw资源目录,这个目录中的资源也会打入到包中,且允许程序通过Application.streamingAssetsPath读取(移动平台不允许写入),这里的资源一般是自定义格式资源文件,读取内容        一般是二进制或文本文件,所以不适合存放unity支持的资源文件。这里需要注意的是android平台读取StreamingAssets的方式,android程序安装后会缓存一个apk在系统只读目录,读取时需要解压,相关文档。
      plugins:插件目录,不在本文讨论范围。
      Editor:编辑器代码目录,不在本文讨论范围。
      资源分类(按使用方式)
      一类是逻辑资源(或者“根资源”),这些资源是游戏的基础,也是unity查找依赖资源的依据,这类资源包括
配置到Build Settings中的场景资源
      存放在Resources中的资源
      存放在StreamingAssets中的资源
       一类是依赖资源,这些资源可以存放在Assets目录下的任何位置,Assets中的资源不会全部打到包里,只会将逻辑资源及其依赖资源打到包中,获得依赖资源可通过编辑器接口 AssetDataBase.GetDependencies(string pathNames)

目录规划
       Resources目录:存放工程中的逻辑资源,一般包括加工过的模型预制,UI面板预制,特效预制,逻辑加载的纹理(例如角色立绘,物品/技能icon)等
        Scenes目录:存放逻辑场景资源
        Atlas目录:存放合图资源
        Font目录:存放字体库资源
        SharedResources目录:这个目录类似于Resources目录,但都不是逻辑资源,二是被依赖的资源,将资源存放到这个目录下,会对这里的资源进行单独打包,可以避免资源冗余。
StreamingAssets目录:存放配置文件,以及发包时的AssetBundle资源

封装需求
        在游戏发布后,为了能够最及时的修复bug和更新玩法,我们需要将资源以AssetBundle的形式打包,使玩家可以通过热更新获得最新的内容。但是在游戏开发阶段,unity工程目录是程序,美术,策划共享的,这一时期资源变化很频繁,每次资源的变化都打包AssetBundle是不实际的。所以,我们需要封装资源加载功能的实现,使其在开发期和发布期有不同的实现方式:
       开发期:从Resources和Build Settings中的场景加载
        发布期:从AssetBundle中加载资源和场景,需要处理依赖资源的加载

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引