加载Lua的几种方式+几种映射+C#访问lua方法+lua访问C#中的属性和方法

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

public class xLuaTest : MonoBehaviour {

	// Use this for initialization
	void Start () {
        //1.通过Resources加载xluaTest文件
        //TextAsset ta = Resources.Load("xLuaTest.lua");
        //LuaEnv env = new LuaEnv(); //实例化lua环境虚拟机
        执行文件中的文本
        //env.DoString(ta.text);
        //env.Dispose();

        //2.通过require加载xLuaTes文件
        //LuaEnv env = new LuaEnv();
        //env.DoString("require 'xLuaTest'");
        //env.Dispose();

        //3.自定义Loader加载
        //LuaEnv env = new LuaEnv();
        //env.AddLoader(MyLoader);
        //env.DoString("require 'xLuaTest'");
        //env.Dispose();

        //4.通过streamingAssets加载xLuaTest文件
        LuaEnv env = new LuaEnv();
        env.AddLoader(MyLoader);
        env.DoString("require 'xLuaTest02'");

        
    }
    public byte[] MyLoader(ref string filepath)
    {
        //streamingAsset下的lua文件路径
        string path = Application.streamingAssetsPath + "/" + filepath + ".lua.txt";
        //lua中代码文本转换字节数组
        return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(path));
    }
    /// 
    /// 3.自定义Loader加载
    /// 
    /// 文件路径
    /// 加载器加载
    //public byte[] MyLoader(ref string filepath)
    //{
    //    string str = "print('hello zhengke')";
    //    return System.Text.Encoding.UTF8.GetBytes(str);
    //}
	
	// Update is called once per frame
	void Update () {
		
	}
    
}

这是lua文件
加载Lua的几种方式+几种映射+C#访问lua方法+lua访问C#中的属性和方法_第1张图片

映射和C#访问lua中的方法 有参+无参

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

public class xLuaTest2 : MonoBehaviour {

	// Use this for initialization
	void Start () {
        LuaEnv env = new LuaEnv();
        env.AddLoader(MyLoader);
        env.DoString("require 'xLuaTest02'");

        访问lua中的全局变量
        //int playerLv = env.Global.Get("lv");
        //string playerName = env.Global.Get("playerName");
        //bool isDie = env.Global.Get("isDie");
        //Debug.Log(playerLv + "=====" + playerName + "=========" + isDie);
        //env.Dispose();

        1.映射到类 获取全局table表
        //Person LLWH = env.Global.Get("Person");
        //Debug.Log(LLWH.name + "  " + LLWH.age + " " + LLWH.isSingle);
        //env.Dispose();

        2.映射到interface
        //IPerson LLWH = env.Global.Get("Person");
        //Debug.Log(LLWH.name + "  " + LLWH.age + " " + LLWH.isSingle);
        //env.Dispose();

        3.映射到字典中
        //Dictionary dict = env.Global.Get>("Person");
        //foreach (string key in dict.Keys)
        //{
        //    Debug.Log(key+"+======>"+dict[key]);
        //}
        //env.Dispose();

        4.映射到list种
        //List list = env.Global.Get>("Person");
        //foreach (object item in list)
        //{
        //    Debug.Log(item+"=====>");
        //}
        //env.Dispose();

        5.映射到luatable
        //LuaTable table = env.Global.Get("Person");
        //print(table.Get("name"));
        //print(table.Get("age"));
        //print(table.Get("isSingle"));
        //env.Dispose();

        //1.C#访问lua方法  无参
        //Action printFunc = env.Global.Get("PrintFunc");
        //printFunc();
        //printFunc = null;
        //env.Dispose();

        //2.C#访问lua方法 有参
        //Add printFunc = env.Global.Get("AddFunc");
        //int result = printFunc(10, 5);
        //Debug.Log(result);
        //printFunc = null;
        //env.Dispose();

        //3.C#调用lua方法 使用luafaction
        LuaFunction func = env.Global.Get<LuaFunction>("AddFunc");
        object[] res = func.Call(1, 23);
        foreach (object item in res)
        {
            Debug.Log(item);
        }
        env.Dispose();


    }
    public byte[] MyLoader(ref string filepath)
    {
        //streamingAsset下的lua文件路径
        string path = Application.streamingAssetsPath + "/" + filepath + ".lua.txt";
        //lua中代码文本转换字节数组
        return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(path));
    }

    // Update is called once per frame
    void Update () {
		
	}

}
class Person
{
    public string name;
    public int age;
    public bool isSingle;
}

[CSharpCallLua]
interface IPerson
{
    string name { get; set; }
    int age { get; set; }
    bool isSingle { get; set; }
}
[CSharpCallLua]
delegate int Add(int a, int b);

加载Lua的几种方式+几种映射+C#访问lua方法+lua访问C#中的属性和方法_第2张图片

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

public class xLuaTest03 : MonoBehaviour {

	// Use this for initialization
	void Start () {
        LuaEnv env = new LuaEnv();
        env.DoString("require 'xLuaTest03'");
        env.Dispose();
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

你可能感兴趣的:(加载Lua的几种方式+几种映射+C#访问lua方法+lua访问C#中的属性和方法)