1. 程式人生 > >Unity+Lua互動篇

Unity+Lua互動篇

首先在我們偉大的GetHub上下載XLua框架。

今天就只發點基礎哈,畢竟第一次弄這個。。

本章主要說一些 Lua 的引用以及 C# 呼叫 Lua。

C#:

        //執行字串
        //其中 Dostring 函式返回值即為程式碼塊裡 return 語句的返回值
        //luaEnv.DoString("print('a  Hello World')");
        //luaEnv.DoString("CS.UnityEngine.Debug.Log('Hello World')");

        //載入 Lua 檔案
        //需要注意的是因為 Resource 只支援有限的字尾,放 Resources 下 lua 檔案得加上 txt 字尾,如:byfile.lua.txt。
        //luaEnv = new LuaEnv();
        //luaEnv.DoString("require 'hjjTest'");
        //TextAsset ta = Resources.Load<TextAsset>("hjjTest.lua");
        //luaEnv.DoString("require 'hjjTest'");

        //自定義 Loader
        //通過 Addloader 可以註冊個回撥,該回調引數是字串,返回一個 byte 陣列。lua 程式碼裡呼叫 require 時,引數就會傳給回撥。
        //注意,require 返回一個由模組常量和函式組成的table。

        //C# 訪問 Lua
        //訪問 lua 全域性資料,特別是 table 以及 function,代價比較大,建議儘量少做,比如在初始化時呼叫獲取一次後,儲存下來,後續直接使用即可。

        //Action呼叫無返回值的函式
        //Action act1 = luaEnv.Global.Get<Action>("fun_A_B");
        //act1();

        //Action呼叫多返回值的函式,out 傳出 lua 文件得到的值(return的值)
        int c = 0;
        int a = 1;
        int b = 2;
        Add add = luaEnv.Global.Get<Add>("fun_A_B1");
        add(2, 3, 4, out a, out b, out c);
    }
}
[CSharpCallLua]
delegate int AddFun(int a, int b, out int outa, out int outb);
[CSharpCallLua]
delegate void Add(int a1, int b1, int c1, out int a, out int b, out int c);

Lua檔案:

function fun_A_B()
	print(1)
end

function fun_A_B1(a, b, c)
	print(a,b,c)
	c = a + b
	print(c)
	return a,c,b
end