赞
踩
目录
本文记录利用YooAsset+HybridCLR来进行资源和dll的更新。YooAsset使用的是新版V2.1.0。相比于旧版,dll(原生文件)和资源要建两个package分别来进行build。dll package采用RawFileBuildPipeline,资源采用BuildinBuildPipeline。
本文将文章中的Demo以StreamingAsset目录加载AB包和dll改为使用YooAsset打包资源,从host来下载。
- [MenuItem("Build/BuildAssetsAndCopyToStreamingAssets")]
- public static void BuildAndCopyABAOTHotUpdateDlls()
- {
- BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
- //BuildAssetBundleByTarget(target);
- CompileDllCommand.CompileDll(target);
- CopyABAOTHotUpdateDlls(target);
- AssetDatabase.Refresh();
- }
导入YooAsset可参考这篇文章 。创建YooAssetSettings和AssetBundleCollectorSetting。
YooAssetV2.0:
原生文件目前需要走自己的构建管线流程!如果从1.0升级需要将原生文件单独拆分出来放到独立的package里,然后通过原生文件构建管线去打包。
我们将默认DefaultPackage用来打包dll等原生文件,需要用PackRawFile规则进行打包。
新建一个Package,取名ResourcePackage,用来打包Prefabs等资源文件:
构建DefaultPackage:
构建ResourcePackage:
(1)参考这篇文章 中的TestLoad,先下载ResourePackage中的资源Cube,再下载DefaultPackage下的四个dll。(记得host url修改为CDN服务器地址)
(2)利用package.LoadRawFileAsync来加载DefaultPackage下的dll原生文件。
- {
- var package = YooAssets.GetPackage("DefaultPackage");
- var assets = new List<string>
- {
- "HotUpdate.dll",
- }.Concat(AOTMetaAssemblyFiles);
-
- //通过YooAsset加载dll
- foreach (var asset in AOTMetaAssemblyFiles)
- {
- Debug.Log($"start download asset:{asset}");
- RawFileHandle handle = package.LoadRawFileAsync(asset);
- yield return handle;
- byte[] bytes = handle.GetRawFileData();
- s_assetDatas[asset] = bytes;
-
- }
- Debug.Log("DownLoadAssets");
- }
(3)利用package.LoadAssetAsync加载ResourcePackage下的Cube prefab。
- void StartGame()
- {
- Debug.Log("StartGame");
- LoadMetadataForAOTAssemblies();
- #if !UNITY_EDITOR
- _hotUpdateAss = Assembly.Load(ReadBytesFromStreamingAssets("HotUpdate.dll.bytes"));
- #else
- _hotUpdateAss = System.AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name == "HotUpdate");
- #endif
- Debug.Log("加载...");
- //Run_InstantiateComponentByAsset();
- GetYooAssetPrefab();
- Type entryType = _hotUpdateAss.GetType("Entry");
- entryType.GetMethod("Start").Invoke(null, null);
-
- }
- private static void GetYooAssetPrefab()
- {
- var package = YooAssets.GetPackage("ResourcePackage");
- var handle = package.LoadAssetAsync<GameObject>("Cube");
- handle.Completed += (op) =>
- {
- var temp= op.InstantiateAsync();
- temp.Completed += (op) =>
- {
- temp.Result.transform.name = "YooAssetCube";
- };
- };
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。