XLuaのインポート
- 公式ダウンロード リンク:リンクの説明を追加して
ソース コードをダウンロードし、解凍します:
Assets フォルダーを開き、プラグインと XLua を Unity Assets にドラッグします。 - Tools を Unity にドラッグします。インポートが完了すると、重複した dll ファイルがあることを示すエラーがコンソールに報告されます。いくつかのファイルを削除すると、残りは図に示されています。
- 次に、Project Setting->Player->Script Compilation にマクロを追加します: HOTFIX_ENABLE
- 準備作業が完了したら、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();//释放
}
}
- Unity でゲーム オブジェクトを作成し、Test スクリプトをマウントします。Unity ウィンドウの上を順番にクリックして生成し、挿入します。
Generate Code
Hotfix Inject In Editor
- [実行] をクリックすると、コンソールにこの文が出力され、関数が正常に使用されたことを示します。次のステップは、より優れたツールを作成することです。
Lua スクリプト マウント
- 説明します:
- パス経由でロードするのではなく、オブジェクトマウントコンポーネントのようにluaスクリプトをドラッグ&ドロップでマウントしたい. ずっと解決策を探していた.この目標。
- プラン:
- mono から継承したクラスを使用してオブジェクトにマウントする
- このクラスには、実行する lua ファイルが含まれています (馬の前にカートを置いているような気がします)。
- 最初のステップは、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 リソース ファイルに変換するために使用されます。
- 2 番目のステップは、現在 Unity は Lua ファイルを直接作成することをサポートしていないため、Lua ファイルを作成する機能を実装する必要があります.この方法は、Unity で Lua スクリプト テンプレートを使用して新しい Lua ファイルを作成する
を参照できます. 上記の実装後、Luaスクリプトテストを作成します.lua、このluaファイルで、オブジェクトを作成して名前を付ける簡単な試みを行うことができます
print('hello')
go=CS.UnityEngine.GameObject('wo');
- 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);
}
}
クリックしてゲームを実行:
結果は成功です
補充する
- 現在の方法はあまり友好的ではありません.lua ファイルをマウントするゲーム オブジェクトが作成されるたびに、LuaEnv が new および Dispose 用に作成されます。