Hello, let’s say I have following classes:
[System.Serializable]
public class A {
public float a;
}
</code>
`[System.Serializable]
public class B : A {
public float b;
}
`
`[System.Serializable]
public class C : A {
public float c;
}`
</pre>
, Manager class which has class A as member:
<pre><code>using UnityEngine;
public class Manager : MonoBehaviour {
public enum Mode { B, C };
public Mode mode = Mode.B;
[SerializeField]
public A classA;
}
and custom inspector for Manager class:
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(Manager))]
public class ManagerEditor : Editor {
private string[] tabNames = { "B", "C" };
Manager myTarget;
private void setClass() {
if(myTarget.mode == Manager.Mode.B) {
if (myTarget.classA.GetType() != typeof(B)) {
myTarget.classA = new B();
}
displayB();
} else if (myTarget.mode == Manager.Mode.C) {
if(myTarget.classA.GetType() != typeof(C)) {
myTarget.classA = new C();
}
displayC();
}
}
private void displayC() {
myTarget.classA.a = EditorGUILayout.FloatField("a", myTarget.classA.a);
(myTarget.classA as C).c = EditorGUILayout.FloatField("c", (myTarget.classA as C).c);
}
private void displayB() {
myTarget.classA.a = EditorGUILayout.FloatField("a", myTarget.classA.a);
(myTarget.classA as B).b = EditorGUILayout.FloatField("b", (myTarget.classA as B).b);
}
public override void OnInspectorGUI() {
myTarget = target as Manager;
myTarget.mode = (Manager.Mode)GUILayout.Toolbar((int)myTarget.mode, tabNames);
setClass();
}
}
Everything seams to be fine, but when I set some values in inspector in edit mode, for example mode C, and a = 1, c = 2:
as soon as I press Play, every value resets:
Is there any way to prevent that and keep values from edit mode in play mode or I am doing something wrong?