xLua学习

xLua教程:https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/XLua%E6%95%99%E7%A8%8B.md
xLua配置:https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/configure.md
FAQ:https://github.com/Tencent/xLua/blob/master/Assets/XLua/Doc/faq.md

 开始学习

private LuaEnv luaenv;

    // Start is called before the first frame update
    void Start()
    {
        luaenv = new LuaEnv();

        luaenv.DoString("print('Hello World!')");
    }

    private void OnDestroy()
    {
        luaenv.Dispose();
    }

 在lua中调用C#中的方法

luaenv.DoString("CS.UnityEngine.Debug.Log('Hello World!')");

 加载运行Lua源文件

在Resources文件夹中建一个 helloworld.lua.txt 文件

里面写着lua 程序

xLua学习_第1张图片 

xLua学习_第2张图片

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;

public class helloworld02 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        TextAsset textAsset = Resources.Load("helloworld.lua");
        LuaEnv luaEnv = new LuaEnv();
        luaEnv.DoString(textAsset.ToString());
        luaEnv.Dispose();
    }

通过内置的 loader 加载lua 源文件

luaenv.DoString(" require 'helloworld'");  //loader  会直接执行里面的代码

 添加自定义的 loader 方法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;

public class defineloader03 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        LuaEnv env = new LuaEnv();
        env.AddLoader(MyLoader);
        env.DoString("require 'helloworld'");
        env.Dispose();
    }

    private byte[] MyLoader(ref string filepath)
    {
        print(filepath);
        string s = "print(123)";
        // 将字符串转成字节数组
        return System.Text.Encoding.UTF8.GetBytes(s);
    }

xLua学习_第3张图片

 require 会将路径传递给每一个 loader 去执行,直到找到或者确定完全找不到为止(报异常)

通过自定义Loader 加载指定目录的Lua脚本

你可能感兴趣的:(unity,Lua)