【Unity】Luaが終了するまで待機する方法【Fungus】
FungusをLuaから操作する際に、Luaが終了するまで待機する方法を説明します。
前提としてUniRx/UniTaskの導入が必要です。
ステップ1 なぜ必要か?
Luaは非同期で処理されるため、Luaの終了をC#側で受け取るには
- 終了を通知するメソッドをC#側で用意する必要がある。
- Secene内のLuaEnvironmentの操作が必要である。
- Luaに終了通知するC#のメソッドを記述する必要がある。
など手間がかかります。そこでFungus側のソースコードを修正して、上記の手間をなくそうと思います。
ステップ2 LuaEnvironment.cs
LuaEnvironment.csに以下のメソッドを追加します。
public IEnumerator RunLuaFunction(Closure closure)
{
DynValue co = interpreter.CreateCoroutine(closure);
while (co.Coroutine.State != CoroutineState.Dead)
{
try
{
co.Coroutine.Resume();
}
catch (InterpreterException ex)
{
LogException(ex.DecoratedMessage, GetSourceCode());
}
yield return null;
}
}
ステップ3 LuaScript.cs
LuaScript.csに以下のメソッドを追加します。
using Cysharp.Threading.Tasks;
※usingの追加が必要です。
public async UniTask OnExecuteAsync()
{
InitLuaScript();
await luaEnvironment.RunLuaFunction(luaFunction);
}
ステップ4 C#側の呼び出し方
Luaの実行方法はこの記事のステップ6を参照してください。
public async void OnFungusAsync()
{
Debug.Log($"開始");
// Luaが終了するまで待機する。
await _luaScript.OnExecuteAsync();
Debug.Log($"終了");
}
Author And Source
この問題について(【Unity】Luaが終了するまで待機する方法【Fungus】), 我々は、より多くの情報をここで見つけました https://qiita.com/Humimaro/items/1214733563e60daf550a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .