The custom editor below creates towers fields in Inspector as shown in picture.
![alt text][1]
When I drop game object into Tower1->TurretObject the same object is shown in Tower2->TurretObject. The same happens for TurretGraphic and Cost.
What could be the problem?
[CustomEditor(typeof(MyClass))]
public class TowersEditor : Editor
{
public override void OnInspectorGUI()
{
var panel = target as MyClass;
var towers = panel.towers;
EditorGUIUtility.LookLikeInspector();
panel.showAllTowers = EditorGUILayout.Foldout(panel.showAllTowers, "Towers");
if (panel.showAllTowers)
{
var size = EditorGUILayout.IntField("Size", towers.Count);
if (size < 0) size = 0;
towers.Resize(size);
panel.showTower.Resize(size);
for (int i = 0; i < towers.Count; i++)
{
panel.showTower[i] = EditorGUILayout.Foldout(panel.showTower[i], "Tower" + (i + 1));
if (panel.showTower[i])
{
if (towers[i] == null) towers[i] = new PanelTowersGUI.TowerInfo();
EditorGUI.indentLevel++;
towers[i].TowerObject = (GameObject)EditorGUILayout.ObjectField("TurretObject", towers[i].TowerObject, typeof(GameObject), true);
towers[i].BtnGraphic = (UISlicedSprite)EditorGUILayout.ObjectField("TurretGraphic", towers[i].BtnGraphic, typeof(UISlicedSprite), true);
towers[i].Cost = EditorGUILayout.IntField("Cost", towers[i].Cost);
EditorGUI.indentLevel--;
}
}
}
}
}
class MyClass
{
[HideInInspector]
public bool showAllTowers;
[HideInInspector]
public List showTower;
[Serializable]
public class TowerInfo
{
public UISlicedSprite BtnGraphic;
public GameObject TowerObject;
public int Cost;
}
[HideInInspector]
public List towers;
}
public static class ListExtensions
{
public static void Resize(this List list, int newSize, T c)
{
int cur = list.Count;
if (newSize < cur)
list.RemoveRange(newSize, cur - newSize);
else if (newSize > cur)
{
if (newSize > list.Capacity)//this bit is purely an optimisation, to avoid multiple automatic capacity changes.
list.Capacity = newSize;
list.AddRange(Enumerable.Repeat(c, newSize - cur));
}
}
public static void Resize(this List list, int sz) where T : new()
{
Resize(list, sz, new T());
}
}
[1]: /storage/temp/9548-towers.png
↧