热更资源工具
AssetMgr
AssetMgr是JEngine封装的加载热更资源/场景的工具
如果不是加载主包资源时,AssetMgr需要先初始化分包才可使用,需要参考Updater使用,要先调用UpdatePackage接口
提示
从Init场景进入游戏时底层会自动调用这个接口实现初始化主包,这就是加载主包资源不需要手动调用接口去初始化分包的原因;
但如果想使用其他包的资源必须先调用UpdatePackage接口去更新分包内容并初始化,然后再使用AssetMgr接口加载之类的;
注意,UpdatePackage也可以针对某个分包多次调用,可以自行决定,但是一般来讲使用UpdatePackage去更新一个分包一次后就可以正常加载这个分包内的资源了
使用接口
是否是真机模式
AssetMgr.RuntimeMode
同步加载主包资源(会被装箱为UnityEngine.Object类型,需要自己拆箱)
AssetMgr.Load(资源全路径)
同步加载指定分包资源(会被装箱为UnityEngine.Object类型,需要自己拆箱)
AssetMgr.Load(资源全路径,分包名称) where T : UnityEngine.Object
同步加载主包泛型资源
AssetMgr.Load<T>(资源全路径) where T : UnityEngine.Object
同步加载指定分包泛型资源
AssetMgr.Load<T>(资源全路径,分包名称) where T : UnityEngine.Object
异步加载主包资源(会被装箱为UnityEngine.Object类型,需要自己拆箱)
await AssetMgr.LoadAsync(资源全路径)
异步加载指定分包资源(会被装箱为UnityEngine.Object类型,需要自己拆箱)
await AssetMgr.LoadAsync(资源全路径,分包名称) where T : UnityEngine.Object
异步加载主包泛型资源
await AssetMgr.LoadAsync<T>(资源全路径) where T : UnityEngine.Object
异步加载指定分包泛型资源
await AssetMgr.LoadAsync<T>(资源全路径,分包名称) where T : UnityEngine.Object
卸载路径资源
AssetMgr.Unload(资源全路径,分包名称 = null)
同步加载场景
AssetMgr.LoadScene(资源全路径, 是否以Additive加载 = false, 分包名称 = null)
异步加载场景
AssetMgr.LoadSceneAsync(资源全路径, 是否以Additive加载 = false, 分包名称 = null, Action<float> 加载中的回调 = null, Action<AsyncOperation> 加载完成的回调 = null)
卸载全部当前场景资源
该接口会在切换场景时自动调用
AssetMgr.RemoveUnusedAssets()
注意事项
- 进入热更场景必须用上面提到的接口,不然可能会导致无法进入,同时热更场景若被打入游戏包(如APK)内,则该场景无法被热更
- 文本文件建议改.txt后缀打入热更包,不然unity可能会屏蔽(.json是可以的,其他的自己试试)
- 二进制文件建议改.bytes后缀打入热更包,不然unity可能会屏蔽(.mp3,.wav是可以的,其他的自己试试)
使用示范
提示
此示范只演示同步或异步加载不同资源,以及该用啥类型,不演示其它接口
其它接口直接调用就好,然后根据参数进行传参
加载预制体
GameObject prefab = AssetMgr.Load<GameObject>("预制体全路径.prefab");//同步加载主包的预制体 GameObject prefab2 = await AssetMgr.LoadAsync<GameObject>("预制体全路径.prefab");//异步加载主包的预制体
加载文本或二进制文件
TextAsset txt = AssetMgr.Load<TextAsset>("文本文件全路径.txt");//同步加载主包的txt文本文件 TextAsset bin = await AssetMgr.LoadAsync<TextAsset>("二进制文件全路径.bytes");//异步加载主包的bytes二进制文件
加载音频
AudioClip clip = AssetMgr.Load<AudioClip>("音频文件全路径.wav");//同步加载主包的wav音频文件
BPath
BPath是每次打AB后自动生成的文件,会生成到热更工程,里面包含了全部打入AB的资源的全路径,可以使用BPath的字段来快速加载指定路径的资源