เริ่มกันเลยครับ
1. หลังจากสร้าง Project ให้ทำการสร้าง C# Script (QuestManager.cs) แล้วทำการเพิ่ม
[Serializable]
public struct MissionManager
{
public enum QuestType
{
EASY,
NORMAL,
HARD
}
public QuestType questType; // สำหรับเก็บชนิดของ Quest
public string questName; // สำหรับเก็บชื่อของ Quest
public int level; // level ขั้นต่ำที่สามารถทำ Quest ได้
}
public class QuestData : MonoBehaviour
{
// สร้าง List สำหรับเก็บ Quests
public List<QuestManager> quests = new List<QuestManager>();
}
[CustomEditor(typeof(QuestData))]
public class QuestDataEditor : Editor
{
private ReorderableList list;
// Use this for initialization
private void OnEnable()
{
// สร้าง ReorderableList
list = new ReorderableList(serializedObject,
serializedObject.FindProperty("quests"),
true, true, true,true);
// ทำการจัดตำแหน่ง Properties
list.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) =>
{
var element = list.serializedProperty.GetArrayElementAtIndex(index);
rect.y += 2;
EditorGUI.PropertyField(new Rect(rect.x, rect.y, 60, EditorGUIUtility.singleLineHeight),
element.FindPropertyRelative("questType"), GUIContent.none);
EditorGUI.PropertyField(
new Rect(rect.x + 60, rect.y, rect.width - 60 - 30, EditorGUIUtility.singleLineHeight),
element.FindPropertyRelative("questName"), GUIContent.none);
EditorGUI.PropertyField(new Rect(rect.x + rect.width - 30, rect.y, 30, EditorGUIUtility.singleLineHeight),
element.FindPropertyRelative("level"), GUIContent.none);
};
}
// เรียกใช้เมื่อมีการ วาด inspector
public override void OnInspectorGUI()
{
serializedObject.Update();
list.DoLayoutList();
serializedObject.ApplyModifiedProperties();
}
}
public void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
DisplayList();
}
}
private void DisplayList()
{
for (int i = 0; i < quests.Count; ++i)
{
Debug.Log(quests[i].questType + " " + quests[i].questName + " " + quests[i].level);
}
}
เท่านี้ก็สามารถนำไปประยุกต์ต่อได้แล้วครับ
ปล. มีอะไรแนะนำได้นะครับ