LoginSignup
2
2

More than 5 years have passed since last update.

GizmosにMeshを表示する

Last updated at Posted at 2016-01-19

前提

Unity3DでPredabにPrefabをネストしたいんだけどリンク切れちゃうので、Prefabをロードする空のObjectを用意する、みたいなことをやったとき、Gizmosを表示しておかないとどういうオブジェクトがどこに表示されるのかよく分からないよ!

解決方法

PrefabのローダーでGizmosをカスタマイズします。
Meshがあるものに関してはそのMeshを表示し、それ以外は一旦適当なGizmosで代用しておきます。

実装

using UnityEngine;

public class PrefabLoader : MonoBehaviour {

    public GameObject prefab;
    public Color color;
    static readonly float alpha = 0.6f;
    static readonly Color defaultColor = new Color(1f, 0f, 0f, alpha);
    static readonly Vector3 labelOffset = new Vector3(0f, 1f, 0f);

    void Start () {
        var obj = Instantiate(prefab, Vector3.zero, Quaternion.identity) as GameObject;
        obj.transform.SetParent(transform, false);
    }

    void OnDrawGizmos () {
        Gizmos.color = defaultColor;
        // colorのAlphaが0じゃないとき上書き
        if (!color.a.Equals(0f)) {
            Gizmos.color = color;
        }

        if (prefab != null) {
            #if UNITY_EDITOR
                UnityEditor.Handles.Label(transform.position + labelOffset, prefab.name);
            #endif
            // 3Dオブジェクトの場合はMeshを表示する
            if (prefab.GetComponent<MeshFilter>() != null) {
                Gizmos.DrawMesh(
                    prefab.GetComponent<MeshFilter>().sharedMesh,
                    transform.position,
                    prefab.transform.rotation,
                    prefab.transform.localScale);
            } else {
                Gizmos.DrawSphere(transform.position, alpha);
            }
        }
    }
}

このスクリプトをGameObjectに追加して、表示したいprefabをInspectorで指定すれば完了。
色を変えたい場合はcolorもInspectorで指定できます。

いざ確認

スクリーンショット 2016-01-19 午後10.45.10.png
こんな具合になります。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2