要旨
結論だけ言うとSelectionBaseAttribute
をつけろです。
問題
OnDrawGizmosでギズモを描画する場合通常はそのギズモをクリックすると対象のオブジェクトが選択されます。
例えば
GizmoTest.cs
using UnityEngine;
using UnityEditor;
public class GizmoTest : MonoBehaviour {
void OnDrawGizmos () {
Gizmos.color = Color.red;
Gizmos.DrawSphere(transform.position, 1);
}
}
というコードがあり、
でChildGizmoについてるとします。
この状態でsceneビューで赤い球をクリックするとChildGizmoが選択されます。
しかしここでParentをプレハブにしてみると、赤い球をクリックした時にParentが選ばれるようになってしまいます。
これはプレハブの仕様でプレハブ内のオブジェクトを選択するとプレハブのルートのオブジェクトが選ばれるようになっているためです。
この仕様自体知らなかったのとGizmoが絡んでいてGizmoのせいだと思っていたのでかなりハマってしまいました。
さて結論でも述べましたが、これを回避するにはSelectionBaseAttribute
をつければ良いです。
GizmoTest.cs
using UnityEngine;
using UnityEditor;
[SelectionBase]
public class GizmoTest : MonoBehaviour {
void OnDrawGizmos () {
Gizmos.color = Color.red;
Gizmos.DrawSphere(transform.position, 1);
}
}
これでプレハブ化した状態でも無事赤い球をクリックした時にChildGizmoが選択されます。