Gizmos에 Mesh 표시

6535 단어 unity5Unity

전제 조건


Unity 3D로 Predab에 Prefab를 끼워 넣으려고 했는데 링크가 끊겨서 Prefab의 빈 Object를 불러올 준비를 했습니다. 이런 일을 했을 때 Gizmos를 미리 표시하지 않으면 어디에 어떤 대상이 나타날지 모릅니다!

해결책


Prefab 마운트에서 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로 지정하면 완료됩니다.
색상을 변경하려면 Inspector를 사용하여 색상을 지정할 수 있습니다.

확인



이렇게 돼서

좋은 웹페이지 즐겨찾기