[Unity] 사용자 정의 편집기 리치 관리자 사용
그 중 하나는 '사용자 정의 편집기' 다.
전체 편집기 스크립트여기 되게 소중한 자료가 있어요.에 관해서는 꼭 보십시오.
기본형
맞춤형 편집기의 기본은 이렇다.
(참고로 별말씀이지만 편집기 스크립트는
Editor
라는 디렉터리에 저장됩니다(디렉터리의 위치는 임의입니다)AnyClassNameInspector.cs
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(AnyClassName))]
public class AnyClassNameInspector : Editor
{
//
}
위에서 말한 바와 같이CustomEditor
Attribute를 이용하여 상속Editor
류의 반을 창설한다.이렇게 하면
typeof
에서 교부된 클래스가 검사기에 나타날 때, 이 사용자 정의 편집기 클래스를 적용하여 자유롭게 사용자 정의를 할 수 있습니다.사용자 정의 검사기 GUI
검사기의 GUI는 다시 쓰기
OnInspectorGUI
로 사용자 정의할 수 있습니다.아주 간단한 샘플은 아래와 같습니다.
AnyClassNameInspector.cs
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(AnyClassName))]
public class AnyClassNameInspector : Editor
{
AnyClassName anyClassName = null;
void OnEnable()
{
// AnyClassNameコンポーネントを取得
anyClassName = target as anyClassName;
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
EditorGUILayout.LabelField("hoge", anyClassName.anyProperty.ToString());
}
}
target
는 속성을 정의하고 typeof
에 지정된 카테고리의 참조를 해당 속성에 전달합니다.이것을 적절하게 분배한 후에 이 분류의 실례 변수로부터 GUI를 적절하게 반영하여 대략적인 절차가 된다.
EditorGUI 클래스
주로 검사자에 GUI를 표시하는 클래스에 사용됩니다.
검사기를 확장할 때 반드시 배워야 할 과정입니다.
Unity UI를 만들 때 사용하는
GUI
클래스의 편집기 버전을 고려하면 이해하기 쉽다고 생각합니다.Editor GUILyout 등급
근거문서
EditorGUI의 자동 레이아웃 버전
이런 거.
상용품
제작 검사기의 GUI에는 자주 사용하거나 나중에 생각나는 것들이 대충 적혀 있다.
객체를 참조하는 필드입니다.이것은 드래그 앤 드롭으로 등록된 일반 항목입니다.
↑ 이런 느낌.
EditorGUILayout.ObjectField(null, typeof(Object), false);
EditorGUILayout.ObjectField(null, typeof(GameObject), false);
// レイアウト情報付き
var options = new []{ GUILayout.Width(64), GUILayout.Height(64) };
EditorGUILayout.ObjectField(null, typeof(Texture), false, options);
이른바 라벨.
수평으로 조를 나누다.가로 및 세로 정렬이 가장 좋은 GUI를 구성할 때는 가로 및 세로 요소 등을 사용합니다.사용 방법은 다음과 같다.
using (new EditorGUILayout.HorizontalScope()) {
EditorGUILayout.LabelField("any label");
EditorGUILayout.LabelField("some label");
}
위에서 설명한 대로 사용using
범위에 나열된 GUI 요소는 가로로 배치됩니다.위 샘플에 적용하면 이런 느낌입니다.
이른바 팝업 UI를 구성합니다.
사용인상은 이런느낌↓
public override void OnInspectorGUI()
{
int index = 0;
string[] list = new string[]{ "hoge", "fuga", "foo", "bar" };
// `selectedIndex`には選択された新しいindexが格納される
int selectedIndex = EditorGUILayout.Popup(index, list);
}
선택한 enum 값으로 설정할 수 있는 속성 표시 수정
가능한 경우 선택된
enum
의 값에 따라 설정 가능한 속성을 변경하고 싶은 경우가 있습니다.이럴 때 사용할 수 있는 설정 방법.
public enum AnyType
{
TypeA,
TypeB,
TypeC,
TypeD,
}
public class AnyClass : MonoBehaviour
{
[SerializeField]
public AnyType AnyType;
[SerializeField][HideInInspector]
private string _anyName = "";
[SerializeField][HideInInspector]
private bool _anyBool = false;
[SerializeField][HideInInspector]
private Vector3 _anyVector = Vector3.zero;
[SerializeField][HideInInspector]
private float _anyFloat = 0f;
// ... actual define.
}
#if UNITY_EDITOR
[CustomEditor(typeof(AnyClass))]
public class AnyClassInspector : Editor
{
private AnyClass _target;
private SerializedProperty _anyNameProperty;
private SerializedProperty _anyBoolProperty;
private SerializedProperty _anyFloatProperty;
private SerializedProperty _anyVectorProperty;
private void OnEnable()
{
_target = target as AnyClass;
// 各種Propertyを取得する
_anyNameProperty = serializedObject.FindProperty("_anyName");
_anyBoolProperty = serializedObject.FindProperty("_anyBool");
_anyFloatProperty = serializedObject.FindProperty("_anyFloat");
_anyVectorProperty = serializedObject.FindProperty("_anyVector");
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
// シリアライズされたPropertyを更新しておく
serializedObject.Update();
switch (_target.AnyType)
{
case AnyType.TypeA:
EditorGUILayout.PropertyField(_anyNameProperty);
break;
case AnyType.TypeB:
EditorGUILayout.PropertyField(_anyNameProperty);
EditorGUILayout.PropertyField(_anyBoolProperty);
break;
case AnyType.TypeC:
EditorGUILayout.PropertyField(_anyNameProperty);
EditorGUILayout.PropertyField(_anyFloatProperty);
break;
case AnyType.TypeD:
EditorGUILayout.PropertyField(_anyNameProperty);
_anyVectorProperty.vector3Value = EditorGUILayout.Vector3Field(_anyVectorProperty.displayName, _anyVectorProperty.vector3Value);
break;
}
// 更新された値を適用する
serializedObject.ApplyModifiedProperties();
}
}
#end
기억하면 편한 녀석
1행의 높이, 현재 시야의 크기 등'알고 싶다'는 반을 제공한다.
EditorGUI의 들여쓰기 수준입니다.
정수
EditorGUI.indentLevel++;
면 그 아래 포석에서 축진을 하나 더 넣고, 반대--
면 축진 수준이 하나 내려가는 느낌으로 간단하게 사용할 수 있다.Reference
이 문제에 관하여([Unity] 사용자 정의 편집기 리치 관리자 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/edo_m18/items/ff97c984cd674ca359d7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)