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

ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。

Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.

Forum rules
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。

Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.
zakimi
Posts: 2
Joined: 2021/06/09 12:59

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

Post by zakimi » 2021/06/09 13:04

表題通り、ノードの情報からGizmoを変更したいと考えております。

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

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

User avatar
caitsithware
管理人
Posts: 407
Joined: 2015/08/17 12:41

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

Post by caitsithware » 2021/06/09 13:57

ご利用ありがとうございます。

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の仕様上の話となるためこちらからのサポートは致しませんのでその点はご理解ください。

zakimi
Posts: 2
Joined: 2021/06/09 12:59

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

Post by zakimi » 2021/06/14 06:11

ご返信ありがとうございます。

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

User avatar
caitsithware
管理人
Posts: 407
Joined: 2015/08/17 12:41

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

Post by caitsithware » 2021/06/14 06:52

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から削除、コールバックメソッド内でやりたいコードを記述で同等の処理ができますので、そのように対応してください。

Post Reply