@作者 : SYFStrive @博客首页 : HomePage 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 🤷♀️:创作不易转发需经作者同意😈
@作者 : SYFStrive
@博客首页 : HomePage
📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗
🤷♀️:创作不易转发需经作者同意😈
💃:程序员每天坚持锻炼💪
👉 U3D热更新技术(🔥)
🕐:开发者将测试好的代码,发布到应用商店的审核平台,平台方会进行稳定性及性能测试。👉 测试成功后,用户即可在 👉 如苹果的AppStore看到应用的更新信息,用户点击应用更新后,需要先关闭应用,再进行更新。 👉 人话:重装
🕐:什么是热更新❓
🤷♂️广义:无需关闭应用,不停机状态下修复漏洞,指软件不通过运营商店的软件版本更新审核,直接通过应用自行下载的软件数据更新资源的行为,重点是更新逻辑代码。
🤷♂️狭义:( iOS热更新为例)👉 无需将代码重新打包提交至AppStore,即可更新客户端的执行代码,即不用下载App而自动更新程序。
🤷♂️现状:苹果禁止了C#的部分反射操作,禁止JIT(即时编译,程序运行时创建并运行新代码),不允许逻辑热更新,只允许使用AssetBundle进行资源热更新。
⚠ 注意:2017年6月1日,苹果更新了热更新政策说明,上线后的项目,一旦发现使用热更新,一样会以下架处理
🧨缩短用户获取新版应用的客户端的流程,改善用户体验具体到ioS平台的应用上,有以下几个原因
🔥 Android,PC(C#)
🔥 iOS(Lua)
苹果官方禁止iOS下的程序热更新;JIT在iOS下无效热更新方案:Unity + Lua插件
流程如👇
基础思维导入如:
环境搭载 👉 https://github.com/rjpcomputing/luaforwindows/
安装 👉 无脑下一步即可
windows+R 👉 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简称AB包孢子🍚🍚
基础思维导入如:
代码如👇
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文档到电脑,方便收藏和打印~
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0