|
总结的是简单的热更新:(更新cube的属性)
刚开始cube是静止不动的,通过xlua更新使cube进行一直绕Y轴旋转
1:需要到github官网下载xlua,然后解压(该解压文件和本例子工程在我的资源里面可以下载:名字为Xlua热更新)
2:打开unity:新建工程
3:需要将两个文件拖到该工程的Asset下:
4:然后需要把Tools文件夹复制到Asset平行文件夹下(不复制过来会报错)
tools文件夹所在位置是xlua下
需要复制到你的工程下
5:这一步千万不能忘:设置宏
.宏定义:添加 HOTFIX_ENABLE 到 ‘Edit > Project Settings > Player > Other Settings > Scripting Define Symbols’。
(注意:各平台需要分别设置)
设置完一定要enter键确定,等编译完后,这个地方就会有了
6:这个步骤也很重要,生成代码
按顺序点击:CLear Generated Code----Generate Code----Hotfix Inject In Editor
需要注意一点(点击的时候一定要等编译完再点下一个,(看unity右下角是否有转圈的齿轮,有的话就是正在编译,没有的话,就是编译成功))
生成成功的标志是:
7:接下来就是编写脚本了,:总共需要两个脚本,一个是lua脚本,一个是C#脚本
C#脚本放在了Camera上,名字为Test,需要引入命名空间xlua(需要注意的是类的上方需要加[Hotfix])就是需要用xlua更新的代码所在的类上都要写这个
整个代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
[Hotfix]
public class Test : MonoBehaviour
{- #region 自定义Loader
- //就是将lua文件放到自定义文件夹下去加载
- LuaEnv luaenv = null;
- void Start()
- {
- luaenv = new LuaEnv();
- }
- public void PrintString()
- {
- Debug.Log("C#------------------------");
- }
- void OnGUI()
- {
- if (GUILayout.Button("click"))
- {
- //使用lamuda表达式定义委托方法,或者在其他地方定义一个方法,将方法名字填进来就可以了
- //luaenv.AddLoader(LoadFunction)
- luaenv.AddLoader((ref string filename) =>
- {
- //去项目中的StreamingAssets下找文件
- //string Path = Application.streamingAssetsPath + "/" + filename + ".lua.txt";
- string Path = @"D:" + filename + ".lua.txt";//去自己定义的文件夹找lua文件
- return System.Text.Encoding.UTF8.GetBytes(System.IO.File.ReadAllText(Path));//这个格式转换要记清楚
- });
- luaenv.DoString("require 'HotLuaFix'");
- }
- }
- void Update()
- {
- PrintString();
- if (luaenv != null)
- {
- luaenv.Tick();
- }
- }
- void OnDestroy()
- {
- luaenv.Dispose();
- }
- //private byte[] LoadFunction(ref string filename)
- //{
- // string Path = Application.streamingAssetsPath + "/" + filename + ".lua.txt";
- // Debug.Log(Path);
- // return System.Text.Encoding.UTF8.GetBytes(System.IO.File.ReadAllText(Path));
- //}
- #endregion
复制代码 }
lua脚本我放在了D盘,因为上面我用的是自定义loader,(在addLoader那里,判断一下这个文件是否存在会更好)
lua脚本如下:
local GameObject=CS.UnityEngine.GameObject
local deltime=CS.UnityEngine.Time.deltime
local cube=GameObject.Find(‘Cube’)
xlua.hotfix(CS.Test, ‘PrintString’, function(self)
print(cube.name)
cube.transform.rotation=cube.transform.rotation*CS.UnityEngine.Quaternion.Euler(0,1,0)
print(cube.transform.rotation)
print(‘lua-----123456’)
end)
这个时候运行后点击ClickBUtton,会出现这个错误
原因是你在生成代码后修改了一些脚本,这个时候需要重新生成代码(也就是再次执行第6个步骤)
这个时候就可以更新C#中的方法,使Cube旋转起来了。
–最后总结:上面的lua脚本截图有个地方错了,就是找不到Hotluatest这个lua脚本,只需要像下面的代码一样改成CS.Test就可以了。
还有用到lua脚本同样放到了该工程下,下载后直接在里面找就行了。
还有lua脚本的后缀是这样的
最后小小宣传下:一个致力于unity游戏,模型,等资源的淘宝店铺,店里有unity3d成品游戏(源工程,源代码),场景资源,模型资源等,一切资源都特别优惠,店铺链接:【unity3D素材包/unity3d中世纪村庄包Medieval Village Pack】https://m.tb.cn/h.eaENjDH?sm=2b946c 点击链接,再选择浏览器咑閞;或復·制这段描述¥kIKkbAV3c3C¥后到?淘♂寳♀? |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|