월드 좌표계를 지역 좌표계로 옮겨서 회전값을 구함.
Transform from, Transform to
using UnityEngine;
using System.Collections;
public class TestUI : MonoBehaviour {
public float m_speed = 0;
public int m_aiType = 0;
public Vector3 m_targetPosition = Vector3.zero;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
public void Reset() {
m_speed = 0;
m_aiType = 0;
m_targetPosition = Vector3.zero;
}
}
using UnityEngine;
using UnityEditor; // 커스텀 Inspector를 만들기 위해는 포함시켜야 한다.
using System.Collections;
// CustomEditor() 애트리뷰트를 사용해서 어떤 타입(클라스)를 사용자화 할 것인지 명시해야한다.
[CustomEditor(typeof(TestUI))]
// Inspector를 사용자화시킬려고 하면 Editor를 상속받아야 한다.
public class TestUIInspector : Editor {
// 사용자화 대상의 레퍼런스를 선언
TestUI m_testUi;
// TestUIInspector가 인스턴스화가 될 때에 호출
void OnEnable() {
// target은 Editor의 멤버 변수으로 CustomEditor() 애트리뷰트에서 설정해 준 타입의 객처에 대한
// 레퍼런스 object형이므로 실제 클라스(타입)으로 캐스팅해서 명확하게 해서 사용하기 용이하게한다.
m_testUi = target as TestUI;
}
// Inspector에서 표시되어지는 것들은 이 메소드 안에서 코딩해야한다.
// EditorGUILayout에서 제공하는 콘드롤을 이용한다.
// GUILayout을 이용해서 할수도 있다.
public override void OnInspectorGUI() {
// 수평으로 구성한다.
EditorGUILayout.BeginVertical ();
// 버튼을 구성
if (GUILayout.Button("Reset") == true)
{
m_testUi.Reset();
}
// 레이블과 드롭리스트 콘드롤
EditorGUILayout.LabelField("AI Type", null);
string[] aiNames = new string[] { "normal", "patrol", "attack"};
int[] aiValues = new int[] { 0, 1, 2 };
m_testUi.m_aiType = EditorGUILayout.IntPopup(m_testUi.m_aiType, aiNames, aiValues);
// 레이블과 슬라이드
EditorGUILayout.PrefixLabel("Speed");
m_testUi.m_speed = EditorGUILayout.Slider(m_testUi.m_speed, 0, 100, null);
EditorGUILayout.EndVertical ();
// x,y,z값을 표시하는 콘드롤
m_testUi.m_targetPosition = EditorGUILayout.Vector3Field("Target Position", m_testUi.m_targetPosition);
// GUI가 변경이 되면 타켓을 다시 렌더링하기 위해서는 Dirty상태를 마크한다.
if (GUI.changed) {
EditorUtility.SetDirty(target);
}
}
}