วิธีการเขียน Tool เบื้องต้น
1. ทำการสร้างไฟล์ C# สำหรับอ้างอิงตัวแปร (ตัวอย่างชื่อ Item.cs)
using UnityEngine;
using System.Collections;
public class Item : MonoBehaviour
{
public int id { get; set; }
public string name { get; set; }
public string detail { get; set; }
public int amount { get; set; }
}
2. จากนั้นทำการสร้าง Folder ชื่อ Editor ภายใน Folder สร้างไฟล์ C# (ตัวอย่างขื่อ ItemEditor.cs)
using UnityEditor;
[CustomEditor(typeof(Item))] // อ้างอิงชนิดตัวแปรแบบ Item
public class ItemEditor : Editor // Inherit จาก Editor
{
const string LOCAL_PATH = "Assets/_Prefabs/"; // Prefabs Path
private Item control;
// เหมือน OnGUI แต่ใช้สำหรับ Inspector
public override void OnInspectorGUI()
{
control = target as Item; // ใช้ control ในการอ้างอิงตัวแปร Item
control.id = EditorGUILayout.IntField("Item ID :", control.id); // วาด Field แบบ Int
control.name = EditorGUILayout.TextField("Item Name :", control.name); // วาด TextField
control.detail = EditorGUILayout.TextArea(control.detail, GUILayout.Height(100)); // วาด TextArea
control.amount = EditorGUILayout.IntField("Item Amount : ", control.amount);
// สร้าง ปุ่ม เมื่อกดให้เรียก function CreateItem()
if(GUILayout.Button("Create"))
{
if(control.name != "" && control.id >= 0)
{
CreateItem();
++control.id;
}
else
{
Debug.LogError("Name and ID can't be empty!!!");
}
}
}
private void CreateItem()
{
// ทำการโหลด Prefab จาก Resource Folder
GameObject template = Resources.Load("ItemTemplate", typeof(GameObject)) as GameObject;
// เนื่องจากใน Prefab Template มีการ Attach Class ItemData จึงเรียกมาเพื่ออ้างอิง
ItemData item = template.GetComponent<ItemData>();
string prefabName = LOCAL_PATH + control.name + ".prefab";
// assign ค่าให้กับ Object ใหม่ จากนั้นทำการสร้าง Prefab ใหม่
item.id = control.id;
item.name = control.name;
item.detail = control.detail;
item.amount = control.amount;
// สร้าง Prefab ใหม่
PrefabUtility.CreatePrefab(prefabName, template);
}
}
ปล. นี้เป็นเพียงตัวอย่างเท่านั้นนะครับ (พอดีลองทำดูเล่นๆ เลยไม่รู้จะทำอะไรดี)
สามารถเอาไปประยุกต์เป็นแบบอื่นๆ ได้อีกครับ
สงสัยก็ติดต่อมาได้นะครับ