はじめに
この記事はHamster Output Advent Calendar 2024の13日目の記事です!
ステートマシンを使っていて面倒...や大変と感じることはコンポーネント取得周り。Idle,Move,Attck見たいにステートがどんどん増える度に書くのが面倒になったので楽したいと思います。
参考にしたリンク
Arbor3でコンポーネント取得する方法
GetComponentでの取得や、インスペクタから直接アタッチ、ParameterContainerからのアタッチなど様々な方法がありますが、回数が増えてくると段々面倒くさくなります。稀に、インスペクタからアタッチした方が楽なコンポーネントもあります。
Animatorの取得はインスペクタからアタッチするとLayer指定やState指定ができるのでむしろ楽。ParameterContainerやGetComponentだとできない。
結論
GetComponentを利用する or VContainerを利用する
GetComponentを利用する場合
ステートのStart内にGetComponentを追加するだけなので簡単です。ArborFSMのStartが実行されるタイミングについてですが、ステートが実行されたタイミングで呼び出されるのでMonoBehaviourのStartと実行するタイミングが少し異なります。
VContainerを利用する
GetComponentよりもさらに楽です。LifetimeScopeを作ってコンポーネントを登録して、Auto Injectの対象に入れて各ステートに[Inject]をつけるだけです。
ステートが沢山あったとしても、自動で取得してくれるので本当に楽です。というかArborFSMもInjectの対象なんだ.....
使うならどっちが良いか
GetComponentの場合、GameObjectの階層が違うだけで利用できなくなる不便さとかもあったりと面倒な部分もあるので、使うならVContainerの方が良いと思います。
VContainerをとりあえず使うだけの記事も上げているので良ければ.............