7080 + 1

ゲームプログラミングの記事を書いてます。

【Unity】Gizmoの表示状態をスクリプトから制御する

シーン内のGameObjectの数が増えてくると、シーンに表示されているGizmoの数がとんでもないことになって、何がなんやらわからなくなってくることがあります。
それらをコンポーネントごとに表示、非表示を切り替えるには、GUI上でのみ設定可能でした。
(リフレクションを使えば、スクリプトからでも制御可能です。)

Unity2022になって、ついに公式でスクリプトから制御する方法が追加されました。
新しい方法を紹介するとともに、他の制御方法も併せて記載します。

GUIで制御する

Sceneビューの右上のアイコンから、Gizmoの表示状態をコンポーネントごとに制御するメニューを開くことができます。

Gizmoメニュー
このメニューはコンポーネント名が検索できるようになったり、パフォーマンスが向上したりと改善されてきていますが、ここで1つ1つ設定するのはとても面倒です。

スクリプトで制御する(リフレクション)

リフレクションを使えば、スクリプトからでも制御する方法が存在はします。
が、リフレクションは呼び出してるメソッド名などが変わったら使えなくなったりパフォーマンスの観点から、可能であればやりたくない方法です。
stackoverflow.com

スクリプトで制御する(公式)

Unity2022あたりから、GizmoUtility、GizmoInfoというクラスが登場し、Gizmoの表示状態を制御するAPIが正式に実装されました。
GizmoUtility - Unity スクリプトリファレンス
GizmoInfo - Unity スクリプトリファレンス

以下は、すべてのGizmoの表示非表示と、LightとCameraのみを非表示にするように変更するサンプルです。
youtu.be

これらは以下のスクリプトでできています。
gist.github.com