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);语句。
        [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原生文件。

    {var package = YooAssets.GetPackage("DefaultPackage");var assets = new List<string>{"HotUpdate.dll",}.Concat(AOTMetaAssemblyFiles);//通过YooAsset加载dllforeach (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");
#endifDebug.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.运行效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450175.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端JavaScript篇之map和Object的区别、map和weakMap的区别

目录 map和Object的区别map和weakMap的区别 map和Object的区别 Object是JavaScript的内置对象&#xff0c;用于存储键值对。Object的键必须是字符串或符号&#xff0c;值可以是任意类型。Map是ES6引入的新数据结构&#xff0c;用于存储键值对。Map的键可以是任意类型&#xff…

山东淄博刑侦大队利用无人机抓获盗窃团伙

山东淄博刑侦大队利用无人机抓获盗窃团伙 近期&#xff0c;山东淄博临淄区发生多起盗窃案件。通过视频追踪和调查访问&#xff0c;推断临淄区某村可能为嫌疑人藏匿地点。刑侦大队无人机应急小组迅速到达现场&#xff0c;经无人机高空侦查&#xff0c;发现并锁定了嫌疑人的藏匿…

AES算法:数据传输的安全保障

在当今数字化时代&#xff0c;数据安全成为了一个非常重要的问题。随着互联网的普及和信息技术的发展&#xff0c;我们需要一种可靠的加密算法来保护我们的敏感数据。Advanced Encryption Standard&#xff08;AES&#xff09;算法应运而生。本文将介绍AES算法的优缺点、解决了…

决策树的相关知识点

&#x1f4d5;参考&#xff1a;ysu老师课件西瓜书 1.决策树的基本概念 【决策树】&#xff1a;决策树是一种描述对样本数据进行分类的树形结构模型&#xff0c;由节点和有向边组成。其中每个内部节点表示一个属性上的判断&#xff0c;每个分支代表一个判断结果的输出&#xff…

牛客-NC249946-小d和孤独的区间

牛客-小d和孤独的区间 题目如上 1 s 1s 1s的时间限制&#xff0c;说明我们应该找到一种“巧法” 根据提示&#xff0c;我们只需要找到“中间全部都是 0 0 0&#xff0c;只有一个1的区间”即可 但是在找的途中&#xff0c;我们不仅要顾及当前 1 1 1之前的 0 0 0的个数&#xff…

python使用两个栈实现队列

这里主要是使用两个栈来实现一个队列,并实现队列的入队和出队函数。 对于一个单词hello,如果正常情况下按照队列中先进先出的特点,会按照hello的顺序入队,同样也会按照hello的顺序出队。 添加图片注释,不超过 140 字(可选) 因此如果想要利用两个栈来形成队列,就要将后…

【JAVA】守护线程是什么?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 我的其他博客 正文 在计算机编程中&#xff0c;守护线程&#xff08;daemon thread&#xff09;是一种在程序运行时在后台提供服务的线程…

机器学习系列-2 线性回归训练损失

机器学习系列-2 线性回归&训练损失 学习内容来自&#xff1a;谷歌ai学习 https://developers.google.cn/machine-learning/crash-course/framing/check-your-understanding?hlzh-cn 本文作为学习记录1 线性回归&#xff1a; 举例&#xff1a;蝉&#xff08;昆虫物种&…

031-安全开发-JS应用WebPack打包器第三方库JQuery安装使用安全检测

031-安全开发-JS应用&WebPack打包器&第三方库JQuery&安装使用&安全检测 #知识点&#xff1a; 1、三方库-JQuery-使用&安全 2、打包器-WebPack-使用&安全 演示案例&#xff1a; ➢打包器-WebPack-使用&安全 ➢第三方库-JQuery-使用&安全 #为什么…

Django学习记录01

1.项目结构 djangoProject02 ├── manage.py 【项目的管理&#xff0c;启动项目、创建app、数据管理】【不要动】【常常用】 └── jangoProject02 ├── __init__.py ├── settings.py 【项目配置】 【常常修改】 ├── urls.py …

【Java程序设计】【C00232】基于Springboot的抗疫物资管理系统(有论文)

基于Springboot的抗疫物资管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的抗疫物资管理系统 用户主要分为管理员和普通用户 管理员&#xff1a; 管理员可以对后台数据进行管理、拥有最高权限、具体权限有…

springboot整合Sa-Token实现登录认证和权限校验(万字长文)

目前在国内的后端开发中&#xff0c;常用的安全框架有spring security、shiro。现在&#xff0c;介绍一款由国人开发的安全框架Sa-Token。这个框架完全由国人开发&#xff0c;所提供的Api文档和一些设置都是比较符合国人的开发习惯的&#xff0c;本次就来介绍一下如何在spring …