本ページにはプロモーションが含まれます
PlaymakerUnity

【Unity】Playmakerで読み込んだSceneのGameObjectを取得する

この記事は約3分で読めます。

はじめに

やりたいこととしては、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にコメントをつけられる方法があれば助かります。