当前位置:   article > 正文

Unity | YooAssetV2.1.0 + HybridCLR热更新_yooasset 2.1

yooasset 2.1

目录

一、项目更改

二、使用YooAsset热更

1.资源配置

2.资源构建

3.将两个文件夹下的资源上传CDN服务器

4.修改代码

5.运行效果


        本文记录利用YooAsset+HybridCLR来进行资源和dll的更新。YooAsset使用的是新版V2.1.0。相比于旧版,dll(原生文件)和资源要建两个package分别来进行build。dll package采用RawFileBuildPipeline,资源采用BuildinBuildPipeline。

        本文将文章中的Demo以StreamingAsset目录加载AB包和dll改为使用YooAsset打包资源,从host来下载。

一、项目更改

  • 新创建一个文件夹YooAsset,将prefabs文件夹移入该文件夹下;新建dlls文件夹。
  • 修改BuildAssetsCommand.cs脚本,注释掉BuildAssetBundleByTarget(target);语句。
  1. [MenuItem("Build/BuildAssetsAndCopyToStreamingAssets")]
  2. public static void BuildAndCopyABAOTHotUpdateDlls()
  3. {
  4. BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
  5. //BuildAssetBundleByTarget(target);
  6. CompileDllCommand.CompileDll(target);
  7. CopyABAOTHotUpdateDlls(target);
  8. AssetDatabase.Refresh();
  9. }
  • 运行Build/BuildAssetsAndCopyToStreamingAssets,将StreamingAssets中的四个dll移到YooAsset/dlls文件夹下。

二、使用YooAsset热更

        导入YooAsset可参考这篇文章 。创建YooAssetSettings和AssetBundleCollectorSetting。

YooAssetV2.0:

        原生文件目前需要走自己的构建管线流程!如果从1.0升级需要将原生文件单独拆分出来放到独立的package里,然后通过原生文件构建管线去打包。

1.资源配置

        我们将默认DefaultPackage用来打包dll等原生文件,需要用PackRawFile规则进行打包。

         新建一个Package,取名ResourcePackage,用来打包Prefabs等资源文件:

2.资源构建

        构建DefaultPackage:

        构建ResourcePackage:

3.将两个文件夹下的资源上传CDN服务器

4.修改代码

(1)参考这篇文章 中的TestLoad,先下载ResourePackage中的资源Cube,再下载DefaultPackage下的四个dll。(记得host url修改为CDN服务器地址)

(2)利用package.LoadRawFileAsync来加载DefaultPackage下的dll原生文件。

  1. {
  2. var package = YooAssets.GetPackage("DefaultPackage");
  3. var assets = new List<string>
  4. {
  5. "HotUpdate.dll",
  6. }.Concat(AOTMetaAssemblyFiles);
  7. //通过YooAsset加载dll
  8. foreach (var asset in AOTMetaAssemblyFiles)
  9. {
  10. Debug.Log($"start download asset:{asset}");
  11. RawFileHandle handle = package.LoadRawFileAsync(asset);
  12. yield return handle;
  13. byte[] bytes = handle.GetRawFileData();
  14. s_assetDatas[asset] = bytes;
  15. }
  16. Debug.Log("DownLoadAssets");
  17. }

(3)利用package.LoadAssetAsync加载ResourcePackage下的Cube prefab。

  1. void StartGame()
  2. {
  3. Debug.Log("StartGame");
  4. LoadMetadataForAOTAssemblies();
  5. #if !UNITY_EDITOR
  6. _hotUpdateAss = Assembly.Load(ReadBytesFromStreamingAssets("HotUpdate.dll.bytes"));
  7. #else
  8. _hotUpdateAss = System.AppDomain.CurrentDomain.GetAssemblies().First(a => a.GetName().Name == "HotUpdate");
  9. #endif
  10. Debug.Log("加载...");
  11. //Run_InstantiateComponentByAsset();
  12. GetYooAssetPrefab();
  13. Type entryType = _hotUpdateAss.GetType("Entry");
  14. entryType.GetMethod("Start").Invoke(null, null);
  15. }
  16. private static void GetYooAssetPrefab()
  17. {
  18. var package = YooAssets.GetPackage("ResourcePackage");
  19. var handle = package.LoadAssetAsync<GameObject>("Cube");
  20. handle.Completed += (op) =>
  21. {
  22. var temp= op.InstantiateAsync();
  23. temp.Completed += (op) =>
  24. {
  25. temp.Result.transform.name = "YooAssetCube";
  26. };
  27. };
  28. }

5.运行效果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/86170
推荐阅读
相关标签
  

闽ICP备14008679号