using UnityEngine;
using System.Collections;
public class CubeRotator01 : MonoBehaviour {
public float rotationSpeed = 180.0f;
void Update () {
gameObject.transform.Rotate(Vector3.up, Time.smoothDeltaTime * rotationSpeed);
}
}
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(CubeRotator))]
public class CubeRotatorInspector01 : Editor {
public override void OnInspectorGUI()
{
base.DrawDefaultInspector();
}
}
[CustomEdiotor()]
인자로 받은 타입에 대한 Inspector의 처리를 함(따라서 여기서는 CubeRotator에 대한 처리를 하게 됨)
OnInspectorGUI()
base.DrawDefaultInspector()
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(CubeRotator))]
public class CubeRotatorInspector02 : Editor
{
public override void OnInspectorGUI()
{
EditorGUILayout.LabelField("Custom Inspector for", "CubeRotator");
base.OnInspectorGUI();
if(GUILayout.Button("Change Direction"))
{
CubeRotator cube = target as CubeRotator;
if (cube)
{
cube.rotationSpeed = -cube.rotationSpeed;
}
}
}
}
EditorGUILayout
LabelField() : Inspector에 라벨을 추가
GUILayout
Button(): 버튼을 생성
target : Editor.target 변수는 UnityEngine.Object 형으로 (CustomEditor에서 설정한)CubeRotator를 가지고 있는 Object
using UnityEngine;
using UnityEditor;
using System.Linq;
using System;
[CanEditMultipleObjects]
[CustomEditor(typeof(CubeRotator))]
public class CubeRotatorInspector03 : Editor
{
public override void OnInspectorGUI()
{
EditorGUILayout.LabelField("Custom Inspector for", "CubeRotator");
base.OnInspectorGUI();
if (GUILayout.Button("Change Direction"))
{
CubeRotator[] cubes = Array.ConvertAll(targets, _t => _t as CubeRotator);
foreach (CubeRotator cube in cubes)
{
if (cube)
{
cube.rotationSpeed = -cube.rotationSpeed;
}
}
}
}
}
[CanEditMultipleObjects] : 같은 속성의 스크립트(여기서는 CubeRotator)를 가진 여러 개의 Object들을 선택했을 때 처리가 될 수 있도록 함
Ling : Array를 캐스팅하기 위해 사용했음
targets : target이 되는 Object가 여러 개일 때 사용됨
public class Movement01 : MonoBehaviour
{
public int _speed;
public Vector3 _targetPosition;
}
using UnityEngine;
using UnityEditor;
using System.Collections;
[CustomEditor(typeof(Movement))]
public class MovementEditor01 : Editor
{
Movement _movement;
void OnEnable()
{
_movement = target as Movement;
}
public override void OnInspectorGUI()
{
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Speed", null);
string[] speedNames = new string[] { "slow", "normal", "fast", "fastest" };
int[] speedValues = new int[] { 1, 5, 10, 20 };
_movement._speed = EditorGUILayout.IntPopup(_movement._speed, speedNames, speedValues);
EditorGUILayout.EndHorizontal();
_movement._targetPosition = EditorGUILayout.Vector3Field("Target Position", _movement._targetPosition);
if (GUI.changed)
EditorUtility.SetDirty(target);
}
}
using UnityEngine;
using UnityEditor;
using System.Collections;
[CustomEditor(typeof(Movement))]
public class MovementEditor02 : Editor
{
Movement _movement;
void OnEnable ()
{
_movement = target as Movement;
}
public override void OnInspectorGUI ()
{
EditorGUILayout.BeginHorizontal ();
EditorGUILayout.LabelField ("Speed", null);
string[] speedNames = new string[] { "slow", "normal", "fast", "fastest" };
int[] speedValues = new int[] { 1, 5, 10, 20 };
_movement._speed = EditorGUILayout.IntPopup (_movement._speed, speedNames, speedValues);
EditorGUILayout.EndHorizontal ();
_movement._targetPosition = EditorGUILayout.Vector3Field ("Target Position", _movement._targetPosition);
EditorGUILayout.BeginHorizontal ();
EditorGUILayout.LabelField (null, null);
if (GUILayout.Button ("Reset")) {
_movement.Start ();
}
EditorGUILayout.EndHorizontal ();
OnInspectorGUIForTest ();
if (GUI.changed)
EditorUtility.SetDirty (target);
}
private void OnInspectorGUIForTest ()
{
Handles.color = Color.red;
Handles.DrawLine (new Vector3 (0, 480, 0), new Vector3 (250, 480, 0));
Texture2D bezier_texture = new Texture2D (1, 2);
bezier_texture.SetPixel (0, 0, Color.green);
bezier_texture.SetPixel (0, 1, Color.green);
Handles.DrawBezier (new Vector3 (10, 480, 0), new Vector3 (250, 480, 0),
new Vector3 (100, 450, 0), new Vector3 (150, 450, 0),
Color.green,
bezier_texture,
1.5f);
EditorGUI.InspectorTitlebar (new Rect (0, 500, 300, 30), false, target);
}
}