0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】Luaが終了するまで待機する方法【Fungus】

Posted at

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($"終了");
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?