728x90
반응형
코드 먼저
#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;
using UnityEngine.Serialization;
//[RequireComponent(typeof(BoxCollider))] // 지정한 component를 요구 -> 지정한 component가 없으면 자동 추가
[AddComponentMenu ("A_CustomAddComponent/EditorTest")] // Component에 Script에서만 script찾지말고 따로 Menu만들어서 넣어 둘 수 있음
[ExecuteInEditMode] // script가 play mode가 아니라 editor mode에서도 동작 가능하게 함
public class Editor_Test : MonoBehaviour
{
[Header("use Range")]
[Tooltip("Basic number")]
public int number_0;
[Space(10)] // 공백 살짝
[Range(0f, 100f)]
public int number_1;
[Space(10)]
[Range(0f, 100f)]
public float number_2;
[Header("use ContextMenu, ContextMenuItem")]
[Space(10)] // [Header("use ContextMenu, ContextMenuItem")]다 위에 쓰면 Header아래 먹음
[ContextMenuItem("Print", "PrintString")]
[ContextMenuItem("Reset", "ResetString")]
[TextArea]
public string _string;
public void PrintString() => Debug.Log(_string);
[ContextMenu("ResetString")]
public void ResetString() => _string = string.Empty;
[Space(10)]
[SerializeField] private int number_3;
[HideInInspector] public int number_4;
[FormerlySerializedAs("_healthCount")] //using UnityEngine.Serialization; 기존 값(_healthCount) 이름을 _killCount으로 바꿈 (값은 그대로)
public int _killCount;
//MenuItem -> using UnityEditor;
[MenuItem("CustomMenu/CheckingTest", false, 1)] // 마지막에 priority - 우선순위 => 메뉴에 위치 우선 순서를 지정
static void Test_0()
{
string menuPath = "CustomMenu/CheckingTest";
bool checking = Menu.GetChecked(menuPath);
if (checking) Debug.Log("check false");
else Debug.Log("check true");
Menu.SetChecked(menuPath, !checking);
}
[MenuItem("CustomMenu/Test_1", false, 0)]
static void Test_1() => Debug.Log("new Menu_Test_1");
[MenuItem("CustomMenu/Test_1", true)] //CustomMenu/Test_1을 Validate로
static bool ConditionLogic()
{
return false; // 사용 못 하 도록 < - > true면 사용 가능인데 이 안에 로직을 짜서 사용하면 됨
}
private void OnEnable()
{
Debug.Log("OnEnable");
}
private void OnDisable()
{
Debug.Log("OnDisable");
}
}
#if UNITY_EDITOR
[CustomEditor(typeof(Editor_Test))] //using UnityEditor;
public class customEditor : Editor
{
public override void OnInspectorGUI()
{
EditorGUILayout.HelpBox("간단한 설명을 적어둘 수 있구만", MessageType.Info);
base.OnInspectorGUI();
}
}
#endif
* Number_2는 float (Range의 매개변수는 float), Number_1은 int여서 위처럼
* ContextMenuItem - 메뉴 이름 + 실행할 함수 이름
*ContextMenu - 메뉴 이름
* ContextMenuItem, ContextMenu 잘됨 :')
*[ExecuteInEditMode]
*[MenuItem]
customEditor class 따로 빼서 HelpBox Inspector에 아름답게 ..
* 하나씩 빼보고 다시 써보고 하면 쉽게 터득 가 능
+ 빌드 오류 방지 위해 전처리기 필 수
반응형
'Unity > Tips' 카테고리의 다른 글
Unity 간단한 노치 대응- (0) | 2021.07.19 |
---|---|
간혹 열거형(enum)을 여러 개 지정할 때 (0) | 2021.07.16 |
기존 프로젝트 URP, HDRP로 전환 시 Material 일일이 바꾸지 말자 (0) | 2021.07.06 |
Unity Visual Studio에서 이상한 오류?! (0) | 2021.06.27 |
Shader HLSL -> Shader Graph화 할때 유용한 사이트 (0) | 2021.06.03 |