I am writing this inspector for the editor that allows me to prototype different enemies and a similar one for attacks.
That allow me to define a variable for the enemy’s Prefab, SightRange ect…
I have never fiddled with serialization before and I am now trying to get to grips with it.
Here is the class for the editor
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
[System.Serializable][CustomEditor(typeof(CharacterDictionary))]
public class CharacterDesigner : Editor {
public enum tabs
{
Characters,
Inspector
}
tabs ActiveTab;
[SerializeField]
List<CharacterPrototype> Characters = new List<CharacterPrototype>();
CharacterPrototype ActiveSelection;
bool[] Attacks;
string visRange = "", user = "";
AttackDictionary AD;
public override void OnInspectorGUI()
{
CharacterDictionary myScript = (CharacterDictionary)target;
GUILayout.BeginHorizontal ();
if(GUILayout.Button("Characters", GUILayout.Width(125)))
{
ActiveTab = tabs.Characters;
}
if(GUILayout.Button("Inspector", GUILayout.Width(125)))
{
ActiveTab = tabs.Inspector;
}
GUILayout.EndHorizontal ();
if(ActiveTab == tabs.Characters)
{
if(GUILayout.Button("+", GUILayout.Width(25), GUILayout.Height(25)))
{
AD = GameObject.Find ("Manager").GetComponent<AttackDictionary> ();
AD.DestroyDictionary();
AD.CreateDictionary();
List<AttackPrototype> Attacks = new List<AttackPrototype>();
Attacks.Add (AD.FindItem("Attack High"));
Characters.Add ( new CharacterPrototype("Default", Attacks, null, 5.0f));
}
foreach(CharacterPrototype Char in Characters)
{
if(GUILayout.Button(Char.CharacterName, GUILayout.Width(250)))
{
ActiveSelection = Char;
}
}
}
else if(ActiveTab == tabs.Inspector && ActiveSelection != null)
{
if(GUILayout.Button("Reset Attacks", GUILayout.Width(250)))
{
Attacks = null;
}
GUILayout.BeginVertical ();
GUILayout.Label("Character Name: ");
user = GUILayout.TextField(user);
ActiveSelection.CharacterName = user;
GUILayout.Label("Sight Range: ");
visRange = GUILayout.TextField(visRange);
GUILayout.Label("Character Model: ");
float.TryParse(visRange, out ActiveSelection.SightRange);
GUILayout.EndVertical ();
ActiveSelection.CharacterModel = (GameObject) EditorGUILayout.ObjectField(ActiveSelection.CharacterModel, typeof(GameObject) , false);
GUILayout.Label(" ");
GUILayout.BeginHorizontal ();
GUILayout.BeginVertical ();
int index = 0;
foreach(var Attack in AD.Attacks.Values)
{
GUILayout.Label(Attack.AttackName);
index++;
}
GUILayout.EndVertical ();
GUILayout.BeginVertical ();
if(Attacks == null)
{
Attacks = new bool[index];
}
for(int i = 0 ; i < index; i++)
{
Attacks[i] = GUILayout.Toggle (Attacks[i], "");
}
GUILayout.EndVertical ();
GUILayout.EndHorizontal ();
GUILayout.Label(" ");
GUILayout.Label("Character Name = " + ActiveSelection.CharacterName);
GUILayout.Label("Sight Range = " + ActiveSelection.SightRange);
}
}
}