Page 1 of 1

アクションノード等のインスペクターの情報からGizmoを変更したい

Posted: 2021/06/09 13:04
by zakimi
表題通り、ノードの情報からGizmoを変更したいと考えております。

具体的には、視界機能を持つ(範囲に入ったらエージェントの視界に入る)デコレーターノードに与えたパラメータから視界を示す扇形を表示することを目指しております。

UnityEngineでやるような通常のEditor拡張をデコレータースクリプトに施したのですが、表示はできませんでした。

Re: アクションノード等のインスペクターの情報からGizmoを変更したい

Posted: 2021/06/09 13:57
by caitsithware
ご利用ありがとうございます。

Gizmoを変更したいとのことですが具体的に試した方法の詳細がわかりませんので、いくつかできそうな方法を記載いたします。
  • MonoBehaviour.OnDrawGizmos
    Decoratorなど、ノードに使用できるスクリプトは全てMonoBehaviourから継承しているため、OnDrawGizmos()などのUnity標準機能が利用可能だと認識しています。
    ただし、実行時以外はenabledがfalseになるArborの仕様のため、その都合で無効なコンポーネントのGizmoが表示されないなどの問題はあるかと思います。
    もしOnDrawGizmos()を利用して問題のある場合は、Gizmo表示用コンポーネントを別途作成するなどの回避策も考えられますのでそのような感じで対処してください。
  • SceneView.duringSceneGui
    Editor拡張としてSceneView.duringSceneGui(Unity2019.1より前はSceneView.onSceneGUIDelegate)を利用して独自に表示する方法もあります。
  • Editor.OnSceneGUI
    Editor.OnSceneGUIについては、特に対応コードは記述しておりませんので未対応の状況だと認識しております。
    こちらの対応が必要であれば「選択ノードのEditor.OnSceneGUIを呼び出してほしい」という感じの要望として今後の更新で対応を検討いたします。
書き方などの詳細についてはUnityの仕様上の話となるためこちらからのサポートは致しませんのでその点はご理解ください。

Re: アクションノード等のインスペクターの情報からGizmoを変更したい

Posted: 2021/06/14 06:11
by zakimi
ご返信ありがとうございます。

OnGizmoDrawの方を試してみましたが、表示することはできませんでした。
方法としてはOnSceneGUIでもなんでも大丈夫ですが、視界などの知覚範囲を定義するときにあったら便利だと思いますので、可能であればGizmoやGUIの表示機能を要望として聞いていただければ幸いです。

Re: アクションノード等のインスペクターの情報からGizmoを変更したい

Posted: 2021/06/14 06:52
by caitsithware
MonoBehaviour.OnDrawGizmosの呼び出し条件を詳しく調べてみたところ、HideFlags.HideInHierarchyが付与されている場合に表示されなくなる仕様のようでした。

Arborでは、古いUnityバージョンにおいてHideInHierarchyが付与されていないとプレハブ化したときに不具合があった関係でHideInHierarchyをつけていました。
Arbor最新版3.8.0の最低動作UnityバージョンであるUnity2018.4ではその不具合もなさそうなので一通り検証して問題なければHideInHierarchyを付与しないように対応しようと思います。

また、Editor.OnSceneGUIについてはprivateメソッドの呼び出しになってしまいますので、対応すべきかどうか悩ましいところです。
ひとまずOnSceneGUI相当の処理をしたい場合は、Editor.OnEnableでSceneView.duringSceneGuiにコールバックメソッド追加、Editor.OnDisableでduringSceneGuiから削除、コールバックメソッド内でやりたいコードを記述で同等の処理ができますので、そのように対応してください。