iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >U3D热更新技术
  • 316
分享到

U3D热更新技术

3diosc# 2023-08-20 19:08:34 316人浏览 八月长安
摘要

@作者 : SYFStrive @博客首页 : HomePage 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 🤷‍♀️:创作不易转发需经作者同意😈

请添加图片描述

@作者 : SYFStrive

@博客首页 : HomePage

📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗

🤷‍♀️:创作不易转发需经作者同意😈

💃:程序员每天坚持锻炼💪

请添加图片描述
在这里插入图片描述
相关专栏

👉 U3D热更新技术(🔥)

理论知识

  冷更新及热更新

     1、什么是冷更新

🕐:开发者将测试好的代码,发布到应用商店的审核平台,平台方会进行稳定性及性能测试。👉 测试成功后,用户即可在 👉 如苹果的AppStore看到应用的更新信息,用户点击应用更新后,需要先关闭应用,再进行更新。 👉 人话:重装

     2、什么是热更新

🕐:什么是热更新❓

请添加图片描述
🤷‍♂️广义:无需关闭应用,不停机状态下修复漏洞,指软件不通过运营商店的软件版本更新审核,直接通过应用自行下载的软件数据更新资源的行为,重点是更新逻辑代码。
🤷‍♂️狭义:( iOS热更新为例)👉 无需将代码重新打包提交至AppStore,即可更新客户端的执行代码,即不用下载App而自动更新程序。
🤷‍♂️现状:苹果禁止了C#的部分反射操作,禁止JIT(即时编译,程序运行时创建并运行新代码),不允许逻辑热更新,只允许使用AssetBundle进行资源热更新。

注意:2017年6月1日,苹果更新了热更新政策说明,上线后的项目,一旦发现使用热更新,一样会以下架处理

     3、为何要热更新

🧨缩短用户获取新版应用的客户端的流程,改善用户体验具体到ioS平台的应用上,有以下几个原因

  1. AppStore的审核周期难控制 👉 需要5-7天时间甚至更久
  2. 手机应用更新频繁
  3. 对于大型应用,更新成本太大
  4. 终极目标 👉 不重新下载、不停机状态下完全变换一个应用的内容

     4、不同平台的热更新技术

🔥 Android,PC(C#)

  1. 将执行代码预编译为AssemblyDLL
  2. 将代码作为TextAsset打包进AssetBundle
  3. 运行时调用AssemblyDLL代码
  4. 更新相应的AssetBundle即可实现热更新

🔥 iOS(Lua)
苹果官方禁止iOS下的程序热更新;JIT在iOS下无效热更新方案:Unity + Lua插件

请添加图片描述

     5、常见的Unity热更新插件

  1. sLua:最快的Lua插件
  2. toLua:由uLua发展而来的,第三代Lua热更新方案
  3. xLua:特性最先进的Lua插件
  4. ILRuntime:纯C#实现的热更新插件

请添加图片描述

     6、Lua的加载器规则

流程如👇

  1. xLua的单例运行环境
  2. xLua解析器创建销毁
  3. xLua加载器编写
  4. xLua中Lua调用C#代码
  5. xLua中C#调用Lua代码

  热更新Lua语法

基础思维导入如:在这里插入图片描述

请添加图片描述

     0、环境安装

环境搭载 👉 https://github.com/rjpcomputing/luaforwindows/

安装 👉 无脑下一步即可
windows+R 👉 Lua 如👇(安装成功)

在这里插入图片描述

     1、Lua面向对象

继承、封装、多态演示如 👇

--万物之父Object={}print("====封装====")function Object:new()local obj={} self.__index=selfsetmetatable(obj,self)return objendprint("====继承====")function Object:SubClass( className )_G[className]={}local  obj = _G[className]obj.base=selfself.__index=selfsetmetatable(obj,self)end--新的类Object:SubClass("Person")Person.age=18Person.sex="男"function Person:Like()self.age=self.age+1self.sex="男女不分"endlocal obj = Person:new()print(obj.age)print(obj:Like())print(obj.age)print(obj.sex)print("====多态====")Person:SubClass("Player")local obj = Player:new()print(obj.age)function Player:Like()self.base.Like(self)self.age=self.age+100self.sex="女"endlocal X = Player:new()print(X:Like())print(X.age)print(X.sex)

  热更新AssetBundel

AssetBundel简称AB包孢子🍚🍚

基础思维导入如:在这里插入图片描述

请添加图片描述

     0、AB是什么

  1. 特定于平台的资产压缩包,有点类似压缩文件
  2. 资产包括:模型、贴图、预设体、音效、材质球等等

     1、AB包思维导图

请添加图片描述

     2、了解AB包有什么作用

  • 相对Resources下的资源AB包更好管理资源
  • 减小包体大小Resources和AB包区别
    1、Resources(打包时定死只读无法修改)
    2、AB包 👉 存储位置可自定义压缩方式自定义后期可以动态更新
    3、减少初始包大小 如:下载游戏后再慢慢更新
  • 热更新
    1、资源热更新
    2、脚本热更新
    3、热更新基本规则
        客户端、自带很少默认资源、资源对比文件
        第一步→ 向服务器获取资源服务器地址
        第二步→ 通过资源对比文件,检查哪些要下载,下载AB包
        服务器 👉 资源服务器、资源对比文件、最新的各种AB包

     3、生成AB包资源文件

在这里插入图片描述

     4、UnityAB包

代码如👇

using System.Collections;using UnityEngine;public class AB : MonoBehaviour{    private void Start()    {        //同步加载===============        //第一步 加载AB包        AssetBundle ab = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "cube");        //第二部 加载AB包中的资源        //GameObject obj = ab.LoadAsset("cube");        GameObject obj1 = ab.LoadAsset("cube", typeof(GameObject)) as GameObject;        Instantiate(obj1);        //异步加载===============        StartCoroutine(AsyLoadAB("aa", "Capsule"));        //卸载场景中的AB包===============        AssetBundle.UnloadAllAssetBundles(false);        ab.Unload(false);        //当对象使用了不同包里面的资源的时候据需要加载对应的依赖包 才能正常===============        //AssetBundle ab1 = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "......");        利用依赖包的关键知识点--利用主包 获取依赖信息===============        //AssetBundle ab1 = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + "StandaloneWindows");        加载主包中的固定信息        //AssetBundleManifest abMani = ab1.LoadAsset("AssetBundleManifest");        从主包文件中 得到依赖信息        //string[] strs=abMani.GetAllDependencies("......");        得到依赖包的名字        //print("Name");        //AssetBundle ab2 = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + strs[1]);    }    IEnumerator AsyLoadAB(string ABNamae, string ABNamae1)    {        //第一步 加载AB包        AssetBundleCreateRequest ab =AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath + "/" + ABNamae);        yield return ab;        //第二部 加载AB包中的资源        AssetBundleRequest AB= ab.assetBundle.LoadAssetAsync(ABNamae1, typeof(GameObject));        yield return AB;        Instantiate(AB.asset as GameObject);    }}

最后

在这里插入图片描述
本文到这里就结束了,大佬们的支持是我持续更新的最大动力,希望这篇文章能帮到大家💪

 

                 相关专栏连接🔗
在这里插入图片描述

下篇文章再见ヾ( ̄▽ ̄)ByeBye

在这里插入图片描述

来源地址:https://blog.csdn.net/m0_61490399/article/details/127458011

--结束END--

本文标题: U3D热更新技术

本文链接: https://www.lsjlt.com/news/376605.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • U3D热更新技术
    @作者 : SYFStrive @博客首页 : HomePage 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 🤷‍♀️:创作不易转发需经作者同意😈...
    99+
    2023-08-20
    3d ios c#
  • Unity3d热更新(一):更新思路
    目前Unity手游的热更新基本采用如下思路:首先将资源打包成AssetBundle。如果有两个对象共同依赖于同一个对象,需要采用依赖关系打包。AssetBundle需要根据不同的平台打包,各平台之间不能混用,如IOS和Android。为打包...
    99+
    2023-01-31
    思路 Unity3d
  • uniapp实现热更新
    随着移动开发的发展,热更新已经成为了一个非常重要的功能,可以让应用程序在不需要再次发布的情况下,及时地修正bug并添加新特性。而对于uniapp来说,热更新是一种非常重要的解决方案,因为它可以同时支持多个平台,并且实现起来也比较简单。在本文...
    99+
    2023-05-22
  • golang热更新原理
    Go语言的热更新原理主要通过以下四个步骤实现:1、通过监视源代码文件或指定目录,检测文件内容的变化;2、当文件发生变化时,使用Go的工具链重新构建被修改的代码包或整个程序;3、通过使用plugin包或reflect等反射机制,将新的代码加载...
    99+
    2023-12-18
    go语言 Golang golang热更新
  • nodejs实现热更新
    随着web应用的不断发展,JavaScript已经成为前端以及后端开发中的重要语言之一。而Node.js则是一种基于JavaScript的开源、跨平台的运行时环境。尽管Node.js的热度不如几年前,但它仍然是一个强大的工具,为前端/后端开...
    99+
    2023-05-17
  • Python 软件热更新
    本篇文章涉及技术知识如下: Redis threading 多线程 PyQt5 importlib 热更新 场景 咱们在平时运行一些长时间都会一直运行的软件(如:某些云同步软件)的时候,某些功能因为考虑的情况可能不充分,导致体验不...
    99+
    2023-01-31
    软件 Python
  • Win10最新技术预览版9879更新汇总
    版本号为9879的第三个Windows技术预览版本今天正式发布。相比较9860版本中新增了7000多项改变和全新的通知中心,今天发布的新版本(9879)主要是基于用户反馈数据进行调整优化,主要的更新内容如下: 隐藏任务...
    99+
    2023-06-09
    Win10 9879 预览版 技术
  • 深入理解Android热修复技术原理之资源热修复技术
    目录一、普遍的实现方式二、资源文件的格式三、运行时资源的解析四、另辟蹊径的资源修复方案4.1、新增的资源及其导致 id 偏移4.2、内容发生改变的资源4.3、删除了的资源4.4、对于...
    99+
    2024-04-02
  • Android热修复技术原理中的代码热修复技术是什么
    本篇内容主要讲解“Android热修复技术原理中的代码热修复技术是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android热修复技术原理中的代码热修复技术是什么”吧!一、底层热替换原理1...
    99+
    2023-06-20
  • 深入理解Android热修复技术原理之代码热修复技术
    目录一、底层热替换原理1.1、Andfix 回顾1.2、虚拟机调用方法的原理1.3、兼容性问题的根源1.4、突破底层结构差异1.5、访问权限的问题1.5.1、方法调用时的权限检查1....
    99+
    2024-04-02
  • 深入理解Android热修复技术原理之so库热修复技术
    目录一、SO库加载原理二、SO库热部署实时生效可行性分析2.1、动态注册 native 方法实时生效2.2、静态注册 native 方法实时生效2.3、SO实时生效方案总结三、SO库...
    99+
    2024-04-02
  • Android中的全量更新、增量更新以及热更新
    在客户端开发过程中,我们可能会遇到这样一种需求:点击某个按钮弹出一个弹窗,提示我们可以更新到apk的某个版本,或者我们可以通过服务端接口进行强制更新。在这种需求中,我们是不需要通过应用商店来更新我们的...
    99+
    2023-09-14
    android java android studio
  • Android热修复技术原理之资源热修复技术的示例分析
    小编给大家分享一下Android热修复技术原理之资源热修复技术的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、普遍的实现方式目前市面上的很多资源热修复...
    99+
    2023-06-20
  • Python-使用watchdog热更新
    直接上代码: import importlib from watchdog.observers import Observer from watchdog.events import * class ScriptEventHa...
    99+
    2023-01-31
    Python watchdog
  • docker热更新怎么实现
    Docker 热更新可以通过以下几种方式来实现: 使用 Docker Compose:可以使用 Docker Compose 来...
    99+
    2023-10-27
    docker
  • 什么是Android Multidex热更新
    一、Android Multidex热更新 Multidex热更新是指在不重启应用的情况下,通过后台向app推送一个fix、dex文件,等这个文件下载完成,app提示用户发现新的更新,需要重启app。待用户重启,代码修复即会生效。 Andr...
    99+
    2023-10-29
    Android Multidex
  • 全面讲解CocosCreator热更新
    目录前言什么是热更cocos热更概述manifest工程资源和游戏包内资源的区别searchPaths搜索路径cocos的基础热更流程_localManifest:当前包内的mani...
    99+
    2024-04-02
  • react如何实现热更新
    这篇文章主要讲解了“react如何实现热更新”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react如何实现热更新”吧!react实现热更新的方法:1、使用“yarn add react-h...
    99+
    2023-07-04
  • react 怎么实现热更新
    本教程操作环境:Windows10系统、react18版、Dell G3电脑。react 怎么实现热更新?[React] create-react-app 实现热更新一、使用以下命令行下载 react-hot-loaderyarn add ...
    99+
    2023-05-14
    React
  • nacos怎么实现热更新
    要实现 Nacos 的热更新,可以按照以下步骤操作:1. 在 Nacos 控制台上创建一个配置。2. 在应用程序中引入 Nacos ...
    99+
    2023-08-26
    nacos
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作