[Unity 편집기 확장] Property Drawer가 직접 제작하여 이 프로세서는Prefab 이외에 부착할 수 없습니다

개시하다


변수에 public 또는 Serialize Field 속성을 추가하면 Inspector에서 객체를 첨부할 수 있습니다.
그럴게요.
다만, Prefab을 처리하려던 변수를 잘못 알고 Scene 내 객체를 첨부한 사람 오류가 발생할 수 있다.
그래서 플레파비 이외의 물건을 부착하면 마음대로 벗어날 수 있는PropertyDrawer를 만들어 봤습니다.

뭘 할 수 있어요?


NewBehaviourScript.cs
using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{
    [PrefabField]
    public GameObject hoge;
}
public 변수 앞에 [PrefabField]를 쓰면 Plefab 이외의 대상을 이 변수에 첨부할 수 있습니다
나 못하겠어.플레파비 이외의 대상도 마음대로 떼어낼 수 있다.

소스 코드


우선 다음 스크립트를 만들고 프로젝트에 들어갑니다.
PrefabFieldAttribute.cs
using UnityEngine;

public class PrefabFieldAttribute : PropertyAttribute
{
}
다음 스크립트는 Editor 폴더에 생성됩니다.
PrefabFieldDrawer.cs
using UnityEngine;
using UnityEditor;

[CustomPropertyDrawer(typeof(PrefabFieldAttribute))]
public class PrefabFieldDrawer : PropertyDrawer
{
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        if (property.objectReferenceValue != null)
        {
            var prefabType = PrefabUtility.GetPrefabType(property.objectReferenceValue);
            switch (prefabType)
            {
                case PrefabType.Prefab:
                case PrefabType.ModelPrefab:
                    break;
                default:
                    // Prefab以外がアタッチされた場合アタッチを外す
                    property.objectReferenceValue = null;
                    break;
            }
        }

        label.text += " (Prefab Only)";
        EditorGUI.PropertyField(position, property, label);
    }
}
이만 마치겠습니다.

실행 결과


변수 이름의 표현이 Hoge에서 Hoge(Prefab Only)로 변경됩니다.

여기 플레파브 넣으면 되죠?편집에서 읽을 수 있다는 얘기다.(인원 오류 방지)
Plefab 부착 이외의 대상도 마음대로 떼어낼 수 있다

Prefab인 경우 첨부 가능

참고 자료


나만의 Property Drawer를 만들어라!
http://qiita.com/kyusyukeigo/items/8be4cdef97496a68a39d

좋은 웹페이지 즐겨찾기