当前位置: 首页 > news >正文

任务一 分析电子商务网站栏目结构科技侠智能锁

任务一 分析电子商务网站栏目结构,科技侠智能锁,什么网站不用备案,wordpress二次开发难吗本文章会手把手教大家如何搭建HybridCLRAdressableSpringboot热更。 创作不易,动动发财的小手点个赞。 安装华佗 首先我们按照官网的快速上手指南搭建一个简易的项目: 快速上手 | HybridCLR 注意在热更的代码里添加程序集。把用到的工具放到程序集里…

本文章会手把手教大家如何搭建HybridCLR+Adressable+Springboot热更。

创作不易,动动发财的小手点个赞。

安装华佗

首先我们按照官网的快速上手指南搭建一个简易的项目:

快速上手 | HybridCLR

注意在热更的代码里添加程序集。把用到的工具放到程序集里。

local程序集:这个程序集不热更,跟游戏一起打包:

注意:不能把热更的代码放到local程序集里,local程序集只能调用非热更代码。

安装Adressable:

 然后开始配置Adressable:

系统配置,没什么需要强调的,根据需求点。

 注意,我是用的是自己的config动态修改打包的位置,配置文件在下面:

自定义远端:

使用host(看后面): 这个也是根据需求点就行。

如果你没有自己的服务器,可以使用Addressable自带的host工具(注意修改配置文件里的信息):

Addressable和工具的config文件:

public  class FrameworkConfig
{public static string DownLoadPath = "D:/Desktop/local/test";//打包后,Adressable缓存地址(外部{}引用)public static string RemotePath = "http://47.xxx.43.98/files/";//Adressable的服务器地址(外部{}引用)public static string BaseUrl = "http://47.xxx.43.98/";public static string UploadPath = "http://47.xxx.43.98/upload";//打好的Addressable包的上传的地址public static string DeletePath = "http://47.xxx.43.98/files";//删除服务器远端仓库的请求地址public static string LoginPath = "http://47.xxx.43.98/login";//登录服务器远端仓库的请求地址public static string LogoutPath = "http://47.xxx.43.98/logout";//登出服务器远端仓库的请求地址public static string PackPath=@"D:\GameClient\game-client\client\ServerData\StandaloneWindows64";//打好的本地Addressable包的地址//   public static string RemoteBuildPath = "ServerData/[BuildTarget]";Build地址需要在Addressable里改public static string DLLName = "HotUpdate.dll.bytes";//热更dll在group中的索引public static string StartSceneName="Assets/HotUpdate/Scenes/StartScene.unity";//更新后启动场景的group中的索引public static string DLLPath = @"../HybridCLRData/HotUpdateDlls/StandaloneWindows64/HotUpdate.dll";//热更dll打包后迁移前的位置public static string NewDLLPath = "HotUpdate/Dlls";//热更dll打包后迁移后的位置public static string LevelJsonPosition = "D:\\Desktop\\local\\pos.json"; //地图编辑器生成的地图文件的地址}

Q:为什么ip后面还有,A:因为Springboot服务器的http请求需要把写入删除拉取区分。

热更打包,注意把左上角的profile改成自己的(我用的是remote,默认是defaut),给每个包打上标签(更新使用)

热更逻辑:

我们的代码热更方式就是:用Hybrid打出一个热更的dll,然后把dll转存为比特文件,放到Addressable包里,热更到本地后加载新的dll。

启动逻辑:build一个场景,里面放CheckAssetsUpdate 脚本,在所有包体下载完成后,加载包中的StartScene场景。startScene场景里用代码启动游戏启动逻辑。

using HybridCLR;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.AddressableAssets.ResourceLocators;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceProviders;
using UnityEngine.SceneManagement;
using static UnityEngine.Rendering.VirtualTexturing.Debugging;public class CheckAssetsUpdate : MonoBehaviour
{private AsyncOperationHandle<long> downloadHandle;AsyncOperationHandle remote;private StaticLoadingPage loadPage;void Start(){LoadDefDLL();StartCoroutine(CheckUpdate());loadPage=GetComponent<StaticLoadingPage>();}private void LoadDefDLL(){//����dllDebug.Log("Starting to check and download assets with label: all");List<string> aotDllList = new List<string>{"System.Core.dll","System.dll","Unity.Addressables.dll","Unity.ResourceManager.dll","UnityEngine.CoreModule.dll","mscorlib.dll",};foreach (var dllName in aotDllList){byte[] dllBytes = File.ReadAllBytes($"{Application.streamingAssetsPath}/{dllName}");LoadImageErrorCode err = RuntimeApi.LoadMetadataForAOTAssembly(dllBytes, HomologousImageMode.SuperSet);if (err != LoadImageErrorCode.OK){Debug.LogError($"Failed to load AOT DLL: {dllName}, Error: {err}");// If any AOT DLL fails to load, stop the process}else{Debug.Log($"{dllName} 加载成功");}}}private IEnumerator CheckUpdate(){downloadHandle = Addressables.GetDownloadSizeAsync("all");//Debug.Log("加载"+ downloadHandle);yield return downloadHandle;Debug.Log("检查下载资源");if (downloadHandle.Status == AsyncOperationStatus.Succeeded){if (downloadHandle.Result <= 0){Debug.Log("没有更新");EnterGame();}else{Debug.Log("更新游戏");StartCoroutine(Download());}}yield return null;}IEnumerator Download(){remote = Addressables.DownloadDependenciesAsync("all", true);while (!remote.IsDone){var bytes = remote.GetDownloadStatus().DownloadedBytes;var totalBytes = remote.GetDownloadStatus().TotalBytes;var status = remote.GetDownloadStatus();float progress = status.Percent;Debug.Log($"Download progress : {progress}");loadPage.Loading(progress);yield return null;}EnterGame();}void EnterGame(){Debug.Log("加载了:HotUpdate.dll"+ remote);var loadDllAsync = Addressables.LoadAssetAsync<TextAsset>(FrameworkConfig.DLLName);loadDllAsync.Completed += OnHotUpdateDllLoaded;}void OnHotUpdateDllLoaded(AsyncOperationHandle<TextAsset> handle){if (handle.Status == AsyncOperationStatus.Succeeded){Debug.Log("DLL 加载完毕");Assembly hotUpdate = null;try{hotUpdate = Assembly.Load(handle.Result.bytes);Debug.Log("加载游戏");//GameRoot.Instance.Init();AsyncOperationHandle<SceneInstance> lastHandle= Addressables.LoadSceneAsync(FrameworkConfig.StartSceneName, LoadSceneMode.Single);lastHandle.Completed += (o) =>{loadPage.Loading(1);Destroy(loadPage.loadingCanvas.gameObject,2);};}catch (Exception ex){Debug.LogError("DLL加载错误: " + ex.Message);return;}}}
}

报错解决文档

专门记录一些坑,遇到报错问题可以来这里解决:

【有道云笔记】HybridCLR+Addressables热更
https://note.youdao.com/s/2QhPpppU

或者去官网。

源码:

larito/GameClient (客户端)

larito/StaticServer (静态服务器)

http://www.yayakq.cn/news/286381/

相关文章:

  • 河南平台网站建设济南网站制作企业
  • 玉山建设局网站优化大师好用吗
  • 四川网站建设那家好沈阳网站制作聚艺科技
  • 做网站好不好网站建设qianhaiyou
  • 如何盗用网站模板wordpress 导入演示
  • 珠海企业网站建设水冶那里有做网站的
  • 个人介绍网站模板如何做网站轮播图和菜单全屏
  • 文明网i中国精神文明建设门户网站国外优秀的设计网站
  • 扬中网站建设效果图片 网站源码 采集
  • 成武网站建设网站建设 淘宝运营
  • 乐清做网站网创电商是什么
  • 新吴区住房和建设交通局网站邵阳做网站的有哪些
  • 免费网站模板 html免费小程序怎么赚钱
  • 湖南鸿泰电力建设有限公司网站建站快车官网
  • mip网站建设网络营销的特点主要包括
  • 镇江网站排名优化公司pc网站如何做sp
  • 东莞网站建设最牛平面设计师必看的网站
  • wordpress站点进入时弹窗永久免费crm管理系统
  • 做外贸网站信息淘宝网站首页是用什么软件做的
  • 怎样在织梦网站建设目录徐州做网站的公司
  • 建设集团网站 技术支持中企动力wordpress 弹出层
  • 广告网站模板免费下载手机网站的做
  • 网站权重划分在线电影网站建设
  • 网站开发需求范本四川省住房和城乡建设网站
  • 沈阳网站建设哪家便宜哪个网站找到做箱包厂外发的
  • 高端网站建设专业营销团队生产做网站表带的制造厂家
  • 凡科快速建站网站优化潍坊
  • 学网站建设怎么样二级建造师报考条件2021考试时间
  • 中国网站 服务器动漫制作专业升本能报的专业
  • 北京做网站便宜的公司不干胶网站做最好的