XLua インポートおよびオブジェクト マウント Lua コンポーネント

XLuaのインポート

  1. 公式ダウンロード リンク:リンクの説明を追加して
    ソース コードをダウンロードし、解凍します:
    ここに画像の説明を挿入
    Assets フォルダーを開き、プラグインと XLua を Unity Assets にドラッグします。
  2. Tools を Unity にドラッグします。インポートが完了すると、重複した dll ファイルがあることを示すエラーがコンソールに報告されます。いくつかのファイルを削除すると、残りは図に示されています。
    ここに画像の説明を挿入
  3. 次に、Project Setting->Player->Script Compilation にマクロを追加します: HOTFIX_ENABLE
    ここに画像の説明を挿入
  4. 準備作業が完了したら、lua 関数をテストし、
    XLua 名前空間をインポートする必要がある Test という名前の C# スクリプトを作成し、LuaEnv を使用します。コードは次のとおりです。
public class Test : MonoBehaviour
{
    
    
	public LuaEnv luaEnv;
    void Start()
    {
    
    
    	luaEnv=new LuaEnv();//创建对象
    	//执行lua脚本需要DoString()
    	luaEnv.DoString("print('hello xlua')");
    	//如果需要执行指定lua文件,则需要require+'lua文件名'
    	//luaEnv.DoString("require'fileName'")
    	lua.Dispose();//释放
    }
}
  1. Unity でゲーム オブジェクトを作成し、Test スクリプトをマウントします。Unity ウィンドウの上を順番にクリックして生成し、挿入します。
    Generate Code
    Hotfix Inject In Editor
    ここに画像の説明を挿入
  2. [実行] をクリックすると、コンソールにこの文が出力され、関数が正常に使用されたことを示します。次のステップは、より優れたツールを作成することです。
    ここに画像の説明を挿入

Lua スクリプト マウント

  • 説明します:
    • パス経由でロードするのではなく、オブジェクトマウントコンポーネントのようにluaスクリプトをドラッグ&ドロップでマウントしたい. ずっと解決策を探していた.この目標。
    • プラン:
      1. mono から継承したクラスを使用してオブジェクトにマウントする
      2. このクラスには、実行する lua ファイルが含まれています (馬の前にカートを置いているような気がします)。
  1. 最初のステップは、lua ファイルを Unity でサポートされているファイルに変換することです. TextAssets は
    Unity 内にクラスを作成する必要があります:
[ScriptedImporter(1, ".lua")]
public class LuaImporter : ScriptedImporter
{
    
    
    public override void OnImportAsset(AssetImportContext ctx)
    {
    
    
        var luaTxt = File.ReadAllText(ctx.assetPath);
        var assetText = new TextAsset(luaTxt);
        ctx.AddObjectToAsset("main obj", assetText);
        ctx.SetMainObject(assetText);
    }
}

このクラスは、.lua ファイルを Unity が使用できる TextAssets リソース ファイルに変換するために使用されます。

  1. 2 番目のステップは、現在 Unity は Lua ファイルを直接作成することをサポートしていないため、Lua ファイルを作成する機能を実装する必要があります.この方法は、Unity で Lua スクリプト テンプレートを使用して新しい Lua ファイルを作成する
    ここに画像の説明を挿入
    を参照できます. 上記の実装後、Luaスクリプトテストを作成します.lua、このluaファイルで、オブジェクトを作成して名前を付ける簡単な試みを行うことができます
print('hello')
go=CS.UnityEngine.GameObject('wo');
  1. TextAssets を含むクラスを実装する
public class LuaContainer: MonoBehaviour
{
    
    
	//lua文件
    public TextAsset luaFile;
    //lua环境
    LuaEnv luaEnv;
}

ゲームオブジェクトを作成して LuaContainer をマウントする

  • 次のステップは、現在のオブジェクトにマウントされた lua スクリプトを実行する方法です。
  • 1 つ目は、DoString (文字列) を介して lua スクリプトを実行し、まずウィンドウに書き込まれたばかりの lua ファイルを取得することです。
    ここに画像の説明を挿入
  • その中のテキストコンテンツを取得して実行する
    void Start()
    {
    
    
        luaEnv= new LuaEnv();
        if (luaFile!=null)
        {
    
    
            Debug.Log("加载不为空");
            luaEnv.DoString(luaFile.text);
        }
     }

クリックしてゲームを実行:
ここに画像の説明を挿入
結果は成功です

補充する

  1. 現在の方法はあまり友好的ではありません.lua ファイルをマウントするゲーム オブジェクトが作成されるたびに、LuaEnv が new および Dispose 用に作成されます。

おすすめ

転載: blog.csdn.net/SuShengQuanshiW/article/details/129231619