Unity | YooAssetV2.1.0 + HybridCLR热更新

目录

一、项目更改

二、使用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);语句。
cs 复制代码
        [MenuItem("Build/BuildAssetsAndCopyToStreamingAssets")]
        public static void BuildAndCopyABAOTHotUpdateDlls()
        {
            BuildTarget target = EditorUserBuildSettings.activeBuildTarget;
            //BuildAssetBundleByTarget(target);
            CompileDllCommand.CompileDll(target);
            CopyABAOTHotUpdateDlls(target);
            AssetDatabase.Refresh();
        }
  • 运行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原生文件。

cs 复制代码
    {
        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。

cs 复制代码
    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";
            };
        };
    }

5.运行效果

相关推荐
丁小未11 小时前
基于MVVM框架的XUUI 扩展的UI管理系统教程
unity·mvvm·ui框架·xuui·ui管理器
丁小未1 天前
基于MVVM框架的XUUI HelloWorld 新手教程
unity·性能优化·c#·游戏引擎
丁小未1 天前
基于MVVM框架的XUUI MoreComplex案例
unity·c#
EQ-雪梨蛋花汤1 天前
【Unity笔记】VR 一体机画面锯齿、模型边缘闪烁、接缝抖动排查:MSAA、Mipmap、Render Scale、Z-Fighting 全流程记录
笔记·unity·vr
松树戈1 天前
【Godot4精进之路】03~Godot编辑器常用界面介绍
编辑器·游戏引擎·godot
YigAin1 天前
Unity Spine 资源出现白边的解决办法
unity·游戏引擎·spine
郝学胜-神的一滴2 天前
中级OpenGL教程 013:渲染器类架构设计与逐帧渲染流程详解
开发语言·c++·unity·游戏引擎·图形渲染·opengl·unreal
_helen_5202 天前
unreal engine 虚拟现实 + airsim
游戏引擎·vr·虚幻
真鬼1234 天前
【Unity WebGL】内嵌网页与双向通信
unity·游戏引擎·webgl
zyh______4 天前
C#语法糖(按照实用性排序)
unity·c#