U3D热更新技术

这篇具有很好参考价值的文章主要介绍了U3D热更新技术。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

u3d dynamic fire system,3d,ios,c#

@作者 : SYFStrive

@博客首页 : HomePage

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

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

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

u3d dynamic fire system,3d,ios,c#
u3d dynamic fire system,3d,ios,c#
u3d dynamic fire system,3d,ios,c#

👉 U3D热更新技术(🔥)

理论知识

  冷更新及热更新✔

     1、什么是冷更新

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

     2、什么是热更新

🕐:什么是热更新❓

u3d dynamic fire system,3d,ios,c#
🤷‍♂️广义:无需关闭应用,不停机状态下修复漏洞,指软件不通过运营商店的软件版本更新审核,直接通过应用自行下载的软件数据更新资源的行为,重点是更新逻辑代码。
🤷‍♂️狭义:( 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插件

u3d dynamic fire system,3d,ios,c#

     5、常见的Unity热更新插件

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

u3d dynamic fire system,3d,ios,c#

     6、Lua的加载器规则

流程如👇

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

  热更新Lua语法✔

基础思维导入如:u3d dynamic fire system,3d,ios,c#

u3d dynamic fire system,3d,ios,c#

     0、环境安装

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

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

u3d dynamic fire system,3d,ios,c#

     1、Lua面向对象

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

--万物之父
Object={}

print("====封装====")
function Object:new()
	local obj={} 
	self.__index=self
	setmetatable(obj,self)
	return obj
end

print("====继承====")
function Object:SubClass( className )
	_G[className]={}
	local  obj = _G[className]
	obj.base=self
	self.__index=self
	setmetatable(obj,self)
end

--新的类
Object:SubClass("Person")

Person.age=18
Person.sex="男"
function Person:Like()
	self.age=self.age+1
	self.sex="男女不分"
end

local 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+100
	self.sex="女"
end

local X = Player:new()
print(X:Like())
print(X.age)
print(X.sex)

  热更新AssetBundel✔

AssetBundel简称AB包孢子🍚🍚

基础思维导入如:u3d dynamic fire system,3d,ios,c#

u3d dynamic fire system,3d,ios,c#

     0、AB是什么

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

     1、AB包思维导图

u3d dynamic fire system,3d,ios,c#

     2、了解AB包有什么作用

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

     3、生成AB包资源文件

u3d dynamic fire system,3d,ios,c#

     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<GameObject>("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>("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);
    }
}

最后

u3d dynamic fire system,3d,ios,c#
本文到这里就结束了,大佬们的支持是我持续更新的最大动力,希望这篇文章能帮到大家💪

 

                 相关专栏连接🔗
u3d dynamic fire system,3d,ios,c#

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

u3d dynamic fire system,3d,ios,c#文章来源地址https://www.toymoban.com/news/detail-787977.html

到了这里,关于U3D热更新技术的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AVProVideo☀️一、一款U3D视频播放插件介绍

    🎊 商务合作:https://skode.cn/file/businesscard/wechat.jpg 🎥 本文由 星河造梦坊公司官方 原创! 🏅 如果你有技术问题或项目开发,都可以加上方的联系方式,和我聊一聊你的故事🧡 前段时间看到有人问: 橙哥,AVProVideo支持8K全景视频嘛? 看来,好多人对这款插件的支持的功能

    2024年02月07日
    浏览(50)
  • 使用U3D、pico开发VR(二)——添加手柄摇杆控制移动

    1System: 2Move Speed:注意速度过小会导致看起来没有移动 3RightHandMoveAction(right loco move):个人采用右手柄实现移动 1System: 2Turn Speed:注意旋转速度过小会导致看起来没有移动 3RightHandMoveAction:个人采用右手柄实现旋转 至此,初步的移动功能就实现了

    2024年02月08日
    浏览(67)
  • U3D游戏角色血条制作并显示血量变化

    关键:利用Slider来制作血条 大概效果: 数字会随着血量变化而变化。 步骤 1、在层级面板中右击,选择UI中的Slider. 2、创建好后,将Slider命名为HealthBar,可以看到层级面板中Slider的结构为,删掉其中的“Handle Slide Area”. 3、在层级面板选中HealthBar,在右侧的检查器窗口可以看到

    2024年02月09日
    浏览(46)
  • AVPro Movie Capture☀️一、一款U3D录屏插件介绍

    🎊 商务合作:https://skode.cn/file/businesscard/wechat.jpg 🎥 本文由 星河造梦坊公司官方 原创! 🏅 如果你有技术问题或项目开发,都可以加上方的联系方式,和我聊一聊你的故事🧡 AVPro Movie Capture,是一款249美元的Unity的游戏录制插件。 它既支持游戏内录制,也支持编辑器内录制

    2024年02月07日
    浏览(42)
  • 三维引擎基础概述(Direct3D、OpenGL、UE、U3D、threejs等)

    一般而言,三维引擎是在三维底层图形技术的基础上,封装硬件操作与三维图形算法,形成普遍意义上的三维交互引擎,提供给开发者一个简单易用、功能丰富的三维图形环境,在此基础上进行虚拟现实、三维交互、可视化管理平台二次开发等,极大提高开发效率。 【底层图

    2024年02月11日
    浏览(47)
  • 使用U3D、pico开发VR(一)——将unity的场景在设备中呈现

           最近srtp项目在赶进度,自己之前是在电脑端进行的开发。但是项目是VR端,因此需要重新学习,在此记录一下自己的学习经历。        首先,如何将unity的场景在自己的眼镜中进行呈现呢?        对此,我也找了很多教程,也跟着花了很多时间去做。从国内的

    2024年01月17日
    浏览(64)
  • U3D客户端框架之 音效管理器 与 Fmod介绍安装导入Unity

    Unity内置的Audio底层使用的是FMOD,但是功能不够齐全,高级一点的功能如混合(Mix)等无法使用; 音效管理应该和Unity工程解耦合,这样子可以减轻音效设计师的负担; 使用FMOD后,游戏中我们只需要关心sound event名字就可以了,对具体音效资源不会产生依赖; 目前FMOD支持Windo

    2024年02月02日
    浏览(50)
  • U3D客户端框架之封装 DeviceUtil 获取设备唯一ID和设备型号

            以后上报游戏数据的时候可能需要根据设备唯一id做新增用户的计算,如果直接使用Unity的API会不方便,代码风格不符合我们自己的框架。所以对获取设备ID、设备型号的API 封装了一下。          DeviceUtil.cs 代码

    2024年02月11日
    浏览(56)
  • U3D客户端框架之支持断点续传的文件下载器实现方案

            文件下载器是应用程序的基础模块,为应用程序与外部网络交互提供了必要的桥梁。该模块设计初衷是为了热更新过程中,下载CDN站点上的文件资源,所以下载器会验证 要下载的文件是否存在于CDN中。如果存在允许下载器继续工作;如果不存在会跳过本地下载。

    2024年02月07日
    浏览(54)
  • web3D三维引擎(Direct3D、OpenGL、UE、U3D、threejs)基础扫盲

    三维引擎是指用于创建和渲染三维图形的软件框架。它们通常提供了图形处理、物理模拟、光照、碰撞检测等功能,帮助开发者构建逼真的三维场景和交互体验。在这里,我将为您详细介绍一些常见的三维引擎,包括Direct3D、OpenGL、Unreal Engine、Unity3D和Three.js。 Direct3D是由微软

    2024年02月11日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包