天天看點

XLua---自定義loader

我們在加載lua檔案的時候,可以通過Resources.Load方式加載。

在unity裡面 Resources.Load加載檔案的時候,預設會給你加上字尾,此時直接加載HelloWorld時,unity會自動加上.txt

 也就是說 此時的檔案名是  HelloWorld.txt  是以加載到為空我們可以把lua代碼 字尾依然保留txt。

//正确方式(此時就會正确加載到 HelloWorld.lua.txt檔案)
  TextAsset ta = Resources.Load<TextAsset>("HelloWorld.lua");
  LuaEnv luaenv = new LuaEnv();
  luaenv.DoString(ta.text);
  luaenv.Dispose();
           

但是這種方式比較麻煩,我們可以采用xlua内置加載方式loader去加載檔案

// require 關鍵字,加載并執行,此時不需要加字尾
        LuaEnv luaenv = new LuaEnv();
        luaenv.DoString("require 'HelloWorld'");
        luaenv.Dispose();
           

此時檔案是在Resources檔案夾下面,當我們檔案放在其他地方的時候,這種方式就不好用了,xlua還為我們提供了自定義load的方式

private void Start()
    {
        LuaEnv luaenv = new LuaEnv();
        luaenv.AddLoader(MyLoader);
        //系統會先執行我們自定義的loader,如果自定義loader傳回的位元組數組不為空,程式就不會再繼續執行下去
        //系統會直接執行傳回的位元組數組中的程式
        luaenv.DoString("require'TestLua'");

        luaenv.Dispose();
	}
	
    private byte[] MyLoader(ref string filePath)
    {
        //絕對路徑
        string path = Application.streamingAssetsPath + "/" + filePath + ".lua.txt";
        //相對路徑
       // string path = @"相對路徑" + filePath + ".lua.txt";
        //系統轉位元組數組
        return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(path));
    }