はじめに
やりたいこととしては、Scene間のFSMとやりとりしたい。Additiveで読み込まれた複数のSceneにPlaymakerFSMがアタッチされているGameObjectがあるとします。指定したSceneのGameObjectを取得(参照)して、それにアタッチされているFSMにSendEventをおこないたい。その時のメモ。
方法
ターゲットのFSMが1つの場合
AとBシーンは既に読み込まれている状態です。目的のBのシーンのPlaymakerFSMがアタッチされたGameObjectにタグをアサインして、別のシーンからFind Game Objectアクションでタグ名でGameObjectを参照できる。
ただし参照シーンのGameObjectが増えればその分、余計なタグが増え管理コストが増えていく。

タグを作らないと参照できない。オブジェクト名で参照してもよいが、タグ名での参照が推奨されている。
複数ターゲットFSMがある場合
AとBシーンは既に読み込まれている状態です。PlaymakerにはGet Scene Root Game Objectsアクションがあり、指定したSceneのルートにあるGameObjectを取得して配列に参照代入してくれる。タグを使わない(前者は10個GameObjectとFSMがあったら10個タグをつくらんといかんので管理が面倒)のと、どのみち読み込んだSceneのターゲット以外のGameObjectは参照して操作などするので、個人的にはこちらのほうが使い勝手が良かったです。

BattleGoArrayという配列にHierarchyにロードされているSceneの上から数えて2番目(0カウントスタート)のシーンのルートにあるGameObjectを取得しているところ。配列に指定したSceneのルートにあるGameObjectを全部取得できたのでそこからPlaymakerFSMがアタッチされているGameObjectを取得する。

BattleGoArray配列内の2番目(0カウントスタート)のBaseCanvasを取得してBattleGo変数に格納。

あとは目標のPlaymakerFSMに対してイベントを発火させるだけ。

Get Scene Root Game ObjectsアクションはScene名や階層パスでも参照できます。
Tagsとは?
- Tagsの基本機能
Unityのタグは、特定の目的やカテゴリに基づいてGameObjectを識別するために使用されます。
例えば、「Player」、「Enemy」、「Collectible」などのタグを作成し、GameObjectに付けることで、そのGameObjectを分類できます。 - タグの用途
タグを使うと、特定のGameObjectを効率的に検索したり、特定の種類のオブジェクトだけを処理したりできます。
おわりに
UnityはGameObjectをTagsで参照させるなら、あとで何のタグかわからなくなるので、Tagsにコメントをつけられる方法があれば助かります。


