在unity中配置xlua环境
下载xlua
之后讲该目录打开,将xLua>Assets文件夹下的Plugins和Xlua文件夹,移动至你的工程项目Assets文件夹中。
移动之后用unity打开该项目,则会在菜单栏中出现XLua这个选项。
打开ProjectSettings找到Scripting Define Symbols填入HOTFIX_ENABLE
此时XLua菜单中会多一个选项
还有一点忘了说,还要把下载的Xlua项目根目录中的Tools文件夹移动到你项目的根目录中。
要不在注入的时候会报please install the Tools的错误。
然后在自己的项目中打开下图的场景。
然后选中XLua>Generate Code,等待控制台出现finishied!@#¥的提示
然后选中XLua>Hotfix Inject In Editor,控制台出现finish!就说明注入完成了!
这一步很重要,每次修改完代码都要执行这两步操作!
然后点击开始按钮,在控制台上会显示如下提示
再点击Hotfix按钮,控制台的提示变成了lua
此时官方例子就已经允许成功了,说明xlua在unity中的配置完成了。
现在我们在工程中新建一个名字为Game的场景。然后点击XLua>Clear Generated Code,先清空一下冗余代码。
搭架场景
在Game场景中新建一个Plane和Cube游戏物体,给他们位置归0。调整让Cube位置让它处于plane上,然后在Cube物体上添加Rigidbody组件,新建Cube脚本,把脚本添加在Cube上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Cube : MonoBehaviour
{
private Rigidbody rigidbody;
// Start is called before the first frame update
void Start()
{
rigidbody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
rigidbody.AddForce(Vector3.up*200);
}
}
}
然后保存。运行场景。
此时按W键,发现物体跳起来。
读取外部Lua代码并在unity中运行
我们在任意位置新建Txt文本,命名为Test.lua.txt,输入lua中的打印语句。然后编码格式另存为UTF-8重点否则编译不通过。
保存文件记住这个文件的路径,然后新建HotFixScript脚本,这个是xlua热更脚本。代码如下
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using XLua;
/// <summary>
/// 演示脚本
/// </summary>
public class HotFixScript : MonoBehaviour
{
private LuaEnv luaEnv;//lua虚拟环境
private void Awake()
{
luaEnv = new LuaEnv();//开启lua虚拟环境
luaEnv.AddLoader(MyLoader);
luaEnv.DoString("require 'Test'");//用虚拟机运行Lua代码
}
private byte[] MyLoader(ref string filePath)
{
string absPath = @"H:\xiangmu\Txt\Assets\Lua\" + filePath + ".lua.txt";//在任何地方都可以新建一个存放lua的文件夹,存放Lua代码的路径
return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(absPath));
}
private void OnDestroy()
{
luaEnv.Dispose();//关闭
}
}
因为有代码变动,所以再重复开头的两部操作:
XLua>Generate Code
XLua>Hotfix Inject In Editor
运行场景
lua代码运行成功并显示在控制台中!