Auxiliary data class for editor
I'm trying to create simple custom editor to transform pairs CardSuit&Sprites to Dictionary>
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(CardsView))]
public class CardsViewEditor : Editor {
public override void OnInspectorGUI() {
var script = target as CardsView;
Array suitValues = Enum.GetValues (typeof(CardSuit));
foreach (CardSuit suit in suitValues) {
PairSuitSprites pair = ScriptableObject.CreateInstance<PairSuitSprites>();
pair.suit = suit;
EditorGUILayout.LabelField (pair.suit.ToString ());
SerializedObject serializedObject = new UnityEditor.SerializedObject(pair);
SerializedProperty serializedPropertySprites = serializedObject.FindProperty("sprites");
EditorGUILayout.PropertyField (serializedPropertySprites, true);
serializedObject.ApplyModifiedProperties ();
EditorGUILayout.Space ();
}
}
}
public class PairSuitSprites : ScriptableObject {
public CardSuit suit = 0;
public List<Sprite> sprites;
}
And get smth like this http://prntscr.com/dtndi1
Looks good. But when I try to drag sprites into field or change Size - nothing happens :( Perhaps it's because of "public class PairSuitSprites : ScriptableObject" ?
How can I describe auxiliary data class to use it only in Editor to store temp data (like "PairSuitSprites") ?
Answer by Adam-Mechtley · Jan 11, 2017 at 01:56 PM
Does it help to add this.serializedObject.Update();
at the beginning of OnInspectorGUI()?
I guess data was resetting every OnInspectorGUI(). I abandoned the idea of custom editor, and simply created serializeble class inside target class.
public class CardsView : $$anonymous$$onoBehaviour {
[Serializable]
public class PairSuitSprites {
public CardSuit suit = 0;
public List<Sprite> sprites;
}
public List<PairSuitSprites> pairs = new List<PairSuitSprites> ();
Dictionary<CardSuit, List<Sprite>> cardsFaces = new Dictionary<CardSuit, List<Sprite>>();
static CardsView instance = null;
public static CardsView Instance {
get { return instance;}
}
void Awake() {
if (instance != null) {
Destroy (gameObject);
return;
}
instance = this;
foreach (PairSuitSprites pair in pairs) {
if (!cardsFaces.Contains$$anonymous$$ey (pair.suit)) {
cardsFaces [pair.suit] = new List<Sprite> ();
}
cardsFaces [pair.suit].AddRange (pair.sprites);
}
}
public Sprite GetFaceSkin(CardSuit suit, CardTile tile) {
if (cardsFaces.Contains$$anonymous$$ey (suit)) {
return cardsFaces [suit] [(int)tile];
}
return null;
}
}
I still don't know how to store temporal data in custom editor and not reset it every OnInspectorGUI().