Unity3D 从打包到热更,超简单的XLua运用一条龙

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Mr_Sun88/article/details/87997055

               Unity3D 从打包到热更,超简单的XLua运用一条龙


目录

1、博客介绍

2、XLua环境配置

3、场景搭建和AB包的准备

(1)场景搭建

(2)Lua脚本准备

(3)AB包的准备

4、基础网络环境的搭建

5、热更新的测试

6、资源包下载

7、推送

8、结语



1、博客介绍

       博主也是刚接触XLua不久,本篇博客主要起记录和学习的作用,在本篇博文当中将介绍Xlua的配置和使用,对于萌新和小白来说应该还是有点用处的,大佬就绕道吧。


2、XLua环境配置

关于Xlua的配置在网上有很多文章,很简单,这里在阐述一下。

首先在github上下载XLua的源码工程

将源码Assets目录下的所有文件移动到你自己Unity工程Assets目录下

将源码内和Assets同级的Tools文件全部移动到你自己Unity工程目录下,和你的Assets保持同级

将本地Unity目录下的\Editor\Data\Managed下的Unity.Cecil.dll、Unity.Cecil.Mdb.dll、Unity.Cecil.Pdb.dll三个文件复制到项目中的\Assets\XLua\Src\Editor文件夹下

最后一步,在Unity内File--Bulid Settings-Player Settings-Other Settings-Scripting define Symbols 打开HOTFIX_ENABLE

       输入后,敲击回车,待右下角的圆圈加载完后就可以了,然后测试是否成功,点开编辑器上XLua选项,点击Clear Generated Code ,然后点击Generated Code在右下角加载完成后,点击Hotfix inject in Editor。然后打开XLua的地8个例子HotfixTest,运行后点击左上角HotfixTest,输出变为Lua输出,既成功。

 


3、场景搭建和AB包的准备

这里不知道怎么制作打包工具的请跳转博主上一篇博客

传送门:https://blog.csdn.net/Mr_Sun88/article/details/86553465

(1)场景搭建

这里我们做一个非常简单的工程,一个Cube和一个Sphere,两个按钮

然后设置脚本Test.cs,并挂载在场景内,脚本给两个按钮绑定好方法,方法不做任何处理


 
 
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using XLua;
  6. /// <summary>
  7. /// Test
  8. /// Date:2019/3/1
  9. /// Author:Mr.Sun
  10. /// </summary>
  11. [ Hotfix]
  12. public class Test : MonoBehaviour
  13. {
  14. /// <summary>
  15. /// 方块预制体
  16. /// </summary>
  17. public Transform Cube;
  18. /// <summary>
  19. /// 圆球预制体
  20. /// </summary>
  21. public Transform Sphere;
  22. /// <summary>
  23. /// 按钮1
  24. /// </summary>
  25. public Button BtnOne;
  26. /// <summary>
  27. /// 按钮2
  28. /// </summary>
  29. public Button BtnTwo;
  30. // Use this for initialization
  31. void Start () {
  32. BtnOne.onClick.AddListener(OnClickOne);
  33. BtnTwo.onClick.AddListener(OnClickTwo);
  34. }
  35. // Update is called once per frame
  36. void Update () {
  37. }
  38. /// <summary>
  39. /// 按钮一点击方法
  40. /// </summary>
  41. [ LuaCallCSharp]
  42. private void OnClickOne()
  43. {
  44. }
  45. /// <summary>
  46. /// 按钮二点击方法
  47. /// </summary>
  48. [ LuaCallCSharp]
  49. private void OnClickTwo()
  50. {
  51. }
  52. }

       这里注意了啊,如果想要使用XLua进行热更新,你想要在修改的类前面必须打上标签----->[Hotfix]<-------,在想要修改的方法前必须打上标签------->[LuaCallCSharp]<-------,这些工作都是你在发布前做好的,在你觉得需要热更的地方都打好标签。

(2)Lua脚本准备

下一步我们先用Lua把方法重写一下,点击按钮一破坏掉Cube,点击按钮二破坏掉Sphere。


 
 
  1. local UnityEngine=CS.UnityEngine
  2. xlua.hotfix(CS.Test, 'OnClickOne', function(self)
  3. UnityEngine. Object. Destroy (self.Cube.gameObject)
  4. end)
  5. xlua. hotfix (CS.Test,'OnClickTwo',function(self)
  6. UnityEngine. Object. Destroy (self.Sphere.gameObject)
  7. end)

新建一个txt的文本文件,命名为Load.lua,重写方法就按照上面的格式

xlua.hotfix(cs.类名,‘方法名’,function(self))

-------------方法体--------------

end)

这里有一点需要注意,你重写方法后,在关闭客户端的时候必须释放掉,要不然会报错,写法如下:


 
 
  1. xlua.hotfix(CS.Test, 'OnClickOne', nil)
  2. xlua.hotfix(CS.Test, 'OnClickTwo', nil)

新建一个txt文本,命名为Dispose.lua,格式如下

xlua.hotfix(cs.类名,‘方法名’,nil)

好了现在Lua脚本分别就是,Load.lua.txt 和 Dispose.lua.txt两个文件。

(3)AB包的准备

下面我们将两个txt设置好Assetbudnle的名称和后缀

好了,现在Lua脚本都在AB包内了,对打包流程还有疑问的请移步博主上一篇文章。


4、基础网络环境的搭建

我们这里使用了一个叫做NetBox的软件来模拟网络环境,该软件运行后效果如图

既该软件的同级目录的地址就是http://localhost/+.......,如此我们就可以模拟网络环境了,我们把刚打包好的AB包放在和NetBox的同级目录下。

下面我们写加载Lua的脚本


 
 
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using UnityEngine;
  5. using UnityEngine.Networking;
  6. using XLua;
  7. /// <summary>
  8. /// Test
  9. /// Date:2019/3/1
  10. /// Author:Mr.Sun
  11. /// </summary>
  12. public class LoadLua : MonoBehaviour {
  13. private LuaEnv _luaEnv;
  14. /// <summary>
  15. /// AB包
  16. /// </summary>
  17. private AssetBundle ab;
  18. /// <summary>
  19. /// 加载Lua文件并执行
  20. /// </summary>
  21. private void Awake()
  22. {
  23. _luaEnv = new LuaEnv();
  24. StartCoroutine(LoadABPackage6( "Load"));
  25. }
  26. /// <summary>
  27. /// 释放lua方法
  28. /// </summary>
  29. private void OnDisable()
  30. {
  31. StartCoroutine(LoadABPackage6( "Dispose"));
  32. }
  33. /// <summary>
  34. /// 释放Lua虚拟机
  35. /// </summary>
  36. private void OnDestroy()
  37. {
  38. _luaEnv.Dispose();
  39. }
  40. IEnumerator LoadABPackage6(string fileName)
  41. {
  42. UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle( @"http://localhost/"+ "luascripts.unity.assetbundle");
  43. yield return request.Send();
  44. ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
  45. TextAsset ta = ab.LoadAsset(fileName+ ".lua.txt") as TextAsset;
  46. _luaEnv.DoString(ta.text);
  47. }
  48. }

       该脚本同样是挂载在主场景上,加载方法,在博主上一篇关于AB包的加载方式内都有详细介绍,如果补丁内存在对应的重写方法,XLua会优先运行我们用Lua重写的方法,而不会再运行我们在原C#内写的方法。


5、热更新的测试

       现在我们可以先运行一下NetBox,然后运行场景进行测试,记得凡是修改了C#脚本后都需要点击上方编辑栏的XLua按钮,Clear一下代码,在Genetrate Code,在Hotfix Inject In Editor一下。

可以,我们在Lua中写的方法已经生效了,下面我们把场景打包再次测试。

同样没问题,这样我们就可以直接通过服务器上的AB包来修改我们的代码了。


6、资源包下载

本篇博客所用软件和工程源码:

https://download.csdn.net/download/mr_sun88/10991047


7、推送

先空着


8、结语

       本篇博客呢,只是很基础的介绍了一下有关使用XLua热更新的方法,主要起一个记录的作用,希望能对各位同学也有所帮助,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。

       QQ交流群:806091680(Chinar)

       该群为CSDN博主Chinar所创,推荐一下!我也在群里!

       本文属于原创文章,转载请著名作者出处并置顶!!!!!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值