はじめに
Playmakerのアクションでasync/awaitやりてーぞ。Playmakerからasync/awaitで指定した遷移先を指定して、発火のタイミング操作できるようにしたい。
↑アップデートされました!
方法
async/awaitの処理を記載したスクリプトをゲームオブジェクトにコンポーネントで追加。それをPlaymakerのアクションから呼び出すことで、async/awaitを実行させます。任意のタイミングで実行したい場合、そのゲームオブジェクトを最初にdisactiveにしておき、実行のタイミングでactiveにするみたいな使い方です。(最初のころのコミット)
必須:UniTaskをパッケージでインストール
動画はawait UniTask.Delayを複数処理して、全部が終わったら最後のステートに遷移させる。

空のゲームオブジェクトにasyncHandlerを貼り付けて、FSMをアサインして、ゲームオブジェクトを非活性にする。

上記ではawait1~3が実行され、全ての処理が完了した時点でawaitCompleteが呼び出されます。
想定どおりの動きになりました。ゲームのローディング、ネットワーク初期化、広告初期化の最中に、タイトル画面表示ー>その後広告表示とかできるようになったので、体感も速くなりました。多分。Gitに置いておいた。ご自由に。
注意点
- 非同期処理は状態遷移に影響を与える
async/awaitはゲームのフローに影響を与える可能性があるため、使用する際は非同期処理が完了するまでFSMが進まないように設計する必要があります。 - Unityのメインスレッドで動作することを確認
UnityのAPIは主にメインスレッドで動作するため、非同期処理内でUnityのAPIを使用する場合は注意が必要です。
おわりに
Playmakerで参照したクラスのものを呼び出すだけ。トリガーとしてはPlaymaker上で行えるので、大変満足。


