[Unity 편집기 확장] Property Drawer가 직접 제작하여 이 프로세서는Prefab 이외에 부착할 수 없습니다
5686 단어 Unity 확장UnityEditorUnity
개시하다
변수에 public 또는 Serialize Field 속성을 추가하면 Inspector에서 객체를 첨부할 수 있습니다.
그럴게요.
다만, Prefab을 처리하려던 변수를 잘못 알고 Scene 내 객체를 첨부한 사람 오류가 발생할 수 있다.
그래서 플레파비 이외의 물건을 부착하면 마음대로 벗어날 수 있는PropertyDrawer를 만들어 봤습니다.
뭘 할 수 있어요?
NewBehaviourScript.csusing UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour
{
[PrefabField]
public GameObject hoge;
}
public 변수 앞에 [PrefabField]
를 쓰면 Plefab 이외의 대상을 이 변수에 첨부할 수 있습니다
나 못하겠어.플레파비 이외의 대상도 마음대로 떼어낼 수 있다.
소스 코드
우선 다음 스크립트를 만들고 프로젝트에 들어갑니다.
PrefabFieldAttribute.csusing UnityEngine;
public class PrefabFieldAttribute : PropertyAttribute
{
}
다음 스크립트는 Editor 폴더에 생성됩니다.
PrefabFieldDrawer.csusing 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
Reference
이 문제에 관하여([Unity 편집기 확장] Property Drawer가 직접 제작하여 이 프로세서는Prefab 이외에 부착할 수 없습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-ngtm/items/7bafd2ff45d635e07c3f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
NewBehaviourScript.cs
using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour
{
[PrefabField]
public GameObject hoge;
}
public 변수 앞에 [PrefabField]
를 쓰면 Plefab 이외의 대상을 이 변수에 첨부할 수 있습니다나 못하겠어.플레파비 이외의 대상도 마음대로 떼어낼 수 있다.
소스 코드
우선 다음 스크립트를 만들고 프로젝트에 들어갑니다.
PrefabFieldAttribute.csusing UnityEngine;
public class PrefabFieldAttribute : PropertyAttribute
{
}
다음 스크립트는 Editor 폴더에 생성됩니다.
PrefabFieldDrawer.csusing 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
Reference
이 문제에 관하여([Unity 편집기 확장] Property Drawer가 직접 제작하여 이 프로세서는Prefab 이외에 부착할 수 없습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-ngtm/items/7bafd2ff45d635e07c3f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using UnityEngine;
public class PrefabFieldAttribute : PropertyAttribute
{
}
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
Reference
이 문제에 관하여([Unity 편집기 확장] Property Drawer가 직접 제작하여 이 프로세서는Prefab 이외에 부착할 수 없습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-ngtm/items/7bafd2ff45d635e07c3f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([Unity 편집기 확장] Property Drawer가 직접 제작하여 이 프로세서는Prefab 이외에 부착할 수 없습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/r-ngtm/items/7bafd2ff45d635e07c3f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)