へくれすブログ

UnityとC#中心の備忘録です

【Unity】PlayMakerFSMとZenjectの連携

概要

PlayMakerFSM を継承したステート処理に Zenject で値を Inject したい。

解決方法

  1. PlayMakerFSM の最初のステートで'zenjectReady'イベントを待機させる。
  2. すべての FsmStateAction を明示的に Inject する。
  3. zenjectReady イベントを流す。

PlayMakerFSM

後述の Inject 処理が終わるまで待機する。

f:id:hecres:20190706145427p:plain

明示的 Inject 処理

  1. シーン内にあるすべての PlayMakerFSM を取得
  2. 各 PlayMakerFSM 内にあるすべての FsmStateAction を取得
  3. DiContainer.Inject(FsmStateAction)で明示的に Inject

以下のコンポーネントを適当なオブジェクトにアタッチすると前述した一連の処理が実行される。

RunFSM で設定されたテンプレートにも対応。

検証環境

Version
Unity 2019.1.8f1

2017, 2018 でも動作したはず。