总结的是简单的热更新:(更新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脚本的后缀是这样的
这里写图片描述

关注微信公众号:GameResources 获取游戏资源 或私信需要的文件
请添加图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐