騰訊開源手游熱更新方案Xlua尝鮮(二)——Lua文字列とLuaファイルロードを実行する

1945 ワード

テキストリンク:https://blog.csdn.net/u013824131/article/details/54286398
Luaファイルロード
一、実行文字列
最も基本的なのはLuaEnvを直接使うことです.DoStringは文字列を実行します.もちろん、文字列はLua構文に合致しなければなりません.
例:
using UnityEngine;
using XLua;
 
public class Helloworld : MonoBehaviour {
    void Start () {
        LuaEnv luaenv = new LuaEnv();
        luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')");
        luaenv.Dispose();
    }
}

二、Luaファイルのロード
luaのrequire関数でいいです
例:
LuaEnv luaenv = new LuaEnv();
luaenv.DoString("require 'byfile'");

requireは実際には1つ1つのloaderを調整してロードし、1つの成功があれば次の試みをしないで、すべての失敗はファイルが見つからないことを報告します.
現在、xLuaにはオリジナルのloaderのほかに、Resourceからロードされたloaderが追加されています.Resourceは限られた接尾辞しかサポートされていないので、Resourcesの下のluaファイルにtxt接尾辞を付けなければなりません(付属の例を参照).
Luaスクリプトのロード方法は、プログラム全体がDoString(「require'main」)であり、main.luaは他のスクリプト(luaスクリプトのコマンドライン実行:lua main.lua)をロードします.
もし私のLuaファイルがダウンロードして帰ってきたら、あるいはあるカスタムファイルのフォーマットの中で解凍したり、解読したりしたら、どうしますか?よく聞けば、xLuaのカスタムLoaderはこれらのニーズを満たすことができます.
三、カスタムLoader
xLuaでカスタムloaderを追加するのは簡単で、1つのインタフェースにのみ関連しています.
luaenv = new LuaEnv();
        luaenv.AddLoader((ref string filename) => {
             if (filename == "InMemory")
             {
                 string script = "return {ccc = 9999}";
                 return System.Text.Encoding.UTF8.GetBytes(script);
             }
             return null;
         });
        luaenv.DoString("print('InMemory.ccc=', require('InMemory').ccc)");

実行結果:
LUA: InMemory.ccc= 9999

AddLoaderでは、文字列であるコールバックパラメータを登録できます.luaコードの中でrequireを呼び出すと、パラメータがコールバックに透過し、コールバックではこのパラメータに基づいて指定ファイルをロードすることができます.デバッグをサポートする必要がある場合は、filepathを実際のパスに変更して送信する必要があります.コールバックの戻り値はbyte配列であり、空の場合はloaderが見つからない場合、luaファイルの内容です.テキストリンク:https://blog.csdn.net/u013824131/article/details/54286398