Page 1 of 1

シーン内の特定のGameObjectを参照しているステートを検索する方法について

Posted: 2019/05/21 10:26
by thorikawa
あるシーン内の特定のGameObjectを参照しているステートを検索する方法はありませんでしょうか?

背景を説明させていただきますと、ActivateGameObjectを使い、GameObjectのenable/disableを切り替えている箇所がいくつかあるのですが、本来disableになっているべきところでenableになってしまっていることがあり、どこか自分の見落としているステートが悪さをしているのではないかと思っています。現状一つのシーンに10〜20のArborFSM、一つのFSM内に100以上のステートがあり、人の目で探していくのが困難であるため、自動で検索できたらよいなと思っています。

もしよい方法があればご教示ください。

よろしくお願い致します。

Re: シーン内の特定のGameObjectを参照しているステートを検索する方法について

Posted: 2019/05/21 23:25
by caitsithware
thorikawa wrote: 2019/05/21 10:26 あるシーン内の特定のGameObjectを参照しているステートを検索する方法はありませんでしょうか?
直接、特定のGameObjectで検索する方法はございません。
理由としては、C#の仕様上クラス定義によらずフィールドを無理やり列挙するにはReflectionという特殊な手法を用いなければできないためです。
特に重要な機能でない限り今後実装する予定もありませんのでご了承ください。
thorikawa wrote: 2019/05/21 10:26 背景を説明させていただきますと、ActivateGameObjectを使い、GameObjectのenable/disableを切り替えている箇所がいくつかあるのですが、本来disableになっているべきところでenableになってしまっていることがあり、どこか自分の見落としているステートが悪さをしているのではないかと思っています。現状一つのシーンに10〜20のArborFSM、一つのFSM内に100以上のステートがあり、人の目で探していくのが困難であるため、自動で検索できたらよいなと思っています。
例えば、以下のような方法で確認してみてはいかがでしょうか。
  • Hierarchyの検索で、検索ワードを「ArborFSM」にする。
    (確実に特定型のみ検索したい場合は虫眼鏡アイコンをクリックし種類を「Type」にする)
  • 列挙されたArborFSMオブジェクトを、一つずつ検索。
    • ArborEditorウィンドウのサイドパネルを開き、ノードリストの検索で、検索ワードを「ActivateGameObject」にする
      (確実に特定型のみ検索したい場合は虫眼鏡アイコンをクリックし種類を「Type」にする)
    • 列挙されたノードをそれぞれ選択し目視で確認。
これも量が多く大変そうでしたら、ご自身で検索スクリプトを書いたほうが早いかもしれません。

Re: シーン内の特定のGameObjectを参照しているステートを検索する方法について

Posted: 2019/05/22 00:55
by caitsithware
追記ですが、
参照検索のランタイム実行にこだわらなくてよければ、Reflectionを使わずにUnityEditorのSerializedObjectでもできますね。
ただ、どちらにしても参照を逆にたどるのはUnityの仕様上大変(結局全NodeGraphの全コンポーネント走査することになる)なので、Arbor本体の機能としては今後も実装しないかと思います。

Re: シーン内の特定のGameObjectを参照しているステートを検索する方法について

Posted: 2019/05/22 11:11
by thorikawa
返信頂きありがとうございます。内容承知致しました。
ArborFSMのグラフ内でType検索できることも初めてしりましたので一旦はそちらの方法で解決を試みてみます。
よろしくお願い致します。