Unity+XLua+阿里云热更代码
Unity+AssetsBundel+XLua+阿里云
Unity热更新的步骤:AssetsBundle打包好资源——上传到服务器——运行项目——检测是否需要更新——1.需要更新2.不需要更新——1.需要更新——从服务器下载资源到本地——本地加载资源包——运行。
一、阿里云
操作完了之后就下载阿里云提供的 .Net SDK,解压后把Aliyun.OSS.dll导入到Unity 的 Plugins 文件夹下,需要把Unity .Net框架改为4.6。
二、XLua
1.配置XLua配置
2.编写脚本
Xlua:
Load.lua
local UnityEngine=CS.UnityEngine
xlua.hotfix(CS.LuaHotfixTest,'OnClickOne',function(self)UnityEngine.Object.Destroy(self.Cube.gameObject)
end)xlua.hotfix(CS.LuaHotfixTest,'OnClickTwo',function(self)UnityEngine.Object.Destroy(self.Sphere.gameObject)
end)
Dispose.lua
xlua.hotfix(CS.Test,'OnClickOne',nil)xlua.hotfix(CS.Test,'OnClickTwo',nil)
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using XLua;[Hotfix] // lua需要热更新的脚本
public class LuaHotfixTest : MonoBehaviour
{/// <summary>/// 方块预制体/// </summary>public Transform Cube;/// <summary>/// 圆球预制体/// </summary>public Transform Sphere;/// <summary>/// 按钮1/// </summary>public Button BtnOne;/// <summary>/// 按钮2/// </summary>public Button BtnTwo;// Use this for initializationvoid Start(){BtnOne.onClick.AddListener(OnClickOne);BtnTwo.onClick.AddListener(OnClickTwo);}// Update is called once per framevoid Update(){}/// <summary>/// 按钮一点击方法/// </summary>[LuaCallCSharp]private void OnClickOne(){}/// <summary>/// 按钮二点击方法/// </summary>[LuaCallCSharp]private void OnClickTwo(){}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using Aliyun.OSS;
using Aliyun.OSS.Common;
using UnityEngine;/// <summary>
/// 下载 最新 Lua 文件
/// </summary>
public class DownLoadLua : MonoBehaviour {string filePath;string savePath;Thread thread;Action GetObjectSuccessCallback;OssClient ossClient;// Start is called before the first frame updatevoid Start(){ossClient = new OssClient(Config.EndPoint, Config.AccessKeyId, Config.AccessKeySecret);}// Update is called once per framevoid Update(){if (Input.GetKeyDown(KeyCode.Space)){GetObjectByThread(() =>{Debug.Log("下载成功");},"luascript.assetsbundle",@"F:\GaoSaiFi\UnityTools\XLua\xLua-master\Assets\StreamingAssets\luascript.assetsbundle");}}/// <summary>/// /// </summary>/// <param name="action"></param>/// <param name="filePath">阿里云上传的文件名+后缀</param>/// <param name="savePath">下载之后保存的路径</param>public void GetObjectByThread(Action action, string filePath, string savePath){this.GetObjectSuccessCallback = action;this.filePath = filePath;this.savePath = savePath;thread = new Thread(GetObject);thread.Start();}void GetObject(){try{OssObject result = ossClient.GetObject(Config.Bucket, filePath);using (var resultStream = result.Content){using (var fs = File.Open(savePath, FileMode.OpenOrCreate)){int length = (int)resultStream.Length;byte[] bytes = new byte[length];do{length = resultStream.Read(bytes, 0, length);fs.Write(bytes, 0, length);} while (length != 0);this.GetObjectSuccessCallback();}}}catch (OssException e){print("下载文件出错:" + e);}catch (Exception e){print("下载文件出错:" + e);}finally{thread.Abort();this.GetObjectSuccessCallback = null;}}}
public class Config
{public const string AccessKeyId = "填写自己的AccessKeyId";public const string AccessKeySecret = "填写自己的AccessKeySecret";public const string EndPoint = "oss-cn-beijing.aliyuncs.com";public const string Bucket = "文件夹-gf-test-0";}
using System.Collections;
using UnityEngine;
using XLua;/// <summary>
/// 加载下载好的 Lua 文件
/// </summary>
public class LoadLua : MonoBehaviour
{private LuaEnv _luaEnv;/// <summary>/// AB包/// </summary>private AssetBundle ab;/// <summary>/// 加载Lua文件并执行/// </summary>private void Awake(){_luaEnv = new LuaEnv();StartCoroutine(LoadABPackage6("Load"));}/// <summary>/// 释放lua方法/// </summary>private void OnDisable(){StartCoroutine(LoadABPackage6("Dispose"));}/// <summary>/// 释放Lua虚拟机/// </summary>private void OnDestroy(){_luaEnv.Dispose();}IEnumerator LoadABPackage6(string fileName){AssetBundle obj = AssetBundle.LoadFromFile(@"F:\GaoSaiFi\UnityTools\XLua\xLua-master\Assets\StreamingAssets\luascript.assetsbundle"); //加载我们的AB包TextAsset ta = obj.LoadAsset(fileName + ".lua.txt") as TextAsset;yield return 1;_luaEnv.DoString(ta.text);}
}
三、AsstesBundle
Editor文件夹下添加脚本
using UnityEditor;
using System.IO;
using UnityEngine;public class LoadAB
{private static readonly string AbPath = Application.streamingAssetsPath;[MenuItem("Tools/CreateAB")]static void CreateAbPack(){BuildPipeline.BuildAssetBundles(AbPath, BuildAssetBundleOptions.UncompressedAssetBundle, BuildTarget.StandaloneWindows64);AssetDatabase.Refresh();}
}
把打包出来的文件上传阿里云即可。
Unity+XLua+阿里云热更代码相关推荐
- Unity Xlua之Hotfix热补丁 (一)
Unity Xlua之Hotfix热补丁 (一) 一.第一个热补丁 想要打热补丁的类前需要加上[Hotfix]特性 第一次打热补丁需要加上宏HOTFIX_ENABLE 点击生成代码 点击注入热补丁 例 ...
- 阿里云热修复sophix详解
现在网上有几种常用的app热修复技术,个人感觉阿里云热修复操作比较简单,主要几个步骤,创建app---下载sdk---集成(AS和eclipse)---生成补丁---发布补丁(可以本地调试).下面详细 ...
- 阿里云上克隆代码的两种方法
阿里云上克隆代码的两种方法 Https:在git Bash里直接输入git clone +https地址,便可以把代码克隆到本地了: SSH:要配置SSH Key: a. 首先检查c盘User-> ...
- 阿里云code下载代码和更新代码
1- 本地新建一个文件夹,进入文件夹下面右击打开git 2- Git init初始化一个.git文件夹 3- Git clone git@code.aliyun.com:username/space- ...
- Unity接入 阿里云OSS 腾讯云Cos的SDK,实现上传文件功能
概念 Bucket(存储空间):Bucket是用户用来管理所存储Object的存储空间.每个用户可以拥有多个Bucket.Bucket的名称在OSS的范围内必须是全局唯一的,一旦创建之后无法修改名称. ...
- 我在阿里云做前端代码智能化
作为一个整天以代码为伴的码农,避免不了会接触到各种代码提示工具,但是呢,用久了之后会发现他们都有个共同点,那就是 模型巨大,动辄几百兆:并且模型大必然需要更多的计算,同样会导致电脑内存占用高,风扇呼呼 ...
- 通过API访问阿里云效Codeup代码库,检查某个文件是否存在更新并下载的方法,顺带介绍一下阿里云OpenAPI
需求 家里有个NAS,每日定时执行脚本. 脚本在其他电脑上编写,并用git进行版本管理,git托管为Codeup(阿里云效)上创建的私有代码库. 现在需求是,每次执行前,从Codeup上检查脚本是否更 ...
- 微信头像下载并上传到阿里云OSS,PHP文件上传到阿里云OSS简单代码(OSS文件上传,微信头像下载,CURL下载文件,微信头像链接过期)
(就这么个小事,有多少公司多少项目没做到!!) 微信公众号项目,后端获取到授权用户的微信头像后,要自行下载保存,不下载的话,微信返回的头像链接会在一段时间后过期,无法访问! 下面是我写的两个简单实用方 ...
- 使用Git命令行推送代码到远程仓库,阿里云效Codeup代码管理平台
项目提交暂存.提交本地仓库.拉取.推送: [本步骤是新项目流程]请自行根据自有项目分辨是否需要跳过前两步. 右键点击项目根文件夹,选中Git Bash Here,打开命令行. (1)初始化项目命令: ...
最新文章
- 利用Maven搭建Spring开发环境 【转】
- js表单验证控制代码大全
- java proxy
- linux c 指针和内存分配内存,linux-C基础系列-内存管理(野指针).md
- java中break和return的区别_java 中return和break的区别
- 不加入域不能访问域资源
- LeetCode-Minimum Path Sum[dp]
- logstash multiline
- fzu 2037 Maximum Value Problem
- HTML5: HTML5 Geolocation(地理定位)
- educoder 1-1Python 计算思维训练——公式编程
- 接口测试平台代码实现15:基于生态考虑的菜单重构+意见反馈功能设计
- 开环控制系统与闭环控制系统
- python使用h5py写h5文件,写入tuple元组类型
- age estimation阅读整理(一)
- 蓝牙耳机通话降噪哪个效果好?目前降噪效果最好的耳机推荐
- java实现单一登录 踢人效果
- 通用 OCR API 接口
- Kubernetes资源调度之污点与Pod容忍度
- java: 非法字符: ‘\ufeff‘解决方法
热门文章
- 计算机系统基础-缓冲区溢出攻击
- Spring 面试题(二)
- “一张车票,万般无奈”上网购票频频崩溃!12306再次排队等待中...还是技术惹的祸....
- SEO优化:输出优质原创文章
- ASP.NET——CodeBehind 引起的遐思
- Unity EventTrigger
- VC 比拼 Delphi(1)!
- return的使用方法
- 使用wol远程唤醒linux主机,动手实现Ubuntu系统WOL远程唤醒
- IIS中实现HTTPS的自动跳转