- Home /
SerializedObject data wipe when applying to prefab
Like so many others I am having terrific frustrations trying to get a custom editor to set data on my objects/prefabs and have it save. After following the guide on this thread, my code looks like this:
First, the storage container class and the actual custom component:
[System.Serializable()]
public class CreatureAnimationPair : Object
{
public string animationHandle { get; set; }
public CreaturerAnimationType type { get; set; }
public CreatureAnimationPair (string animationHandle, CreatureAnimationType type)
{
this.animationHandle = animationHandle;
this.type = type;
}
}
[System.Serializable()]
public class CreatureAnimation : MonoBehaviour
{
public List<CreatureAnimationPair> animationPairs;
...
}
Then, the editor class:
[CustomEditor(typeof(CreatureAnimation))]
public class CreatureAnimationEditor : Editor
{
SerializedObject creatureAnimationSO;
CreatureAnimation creatureAnimation;
void OnEnable ()
{
creatureAnimationSO = new SerializedObject(target);
creatureAnimation = (CreatureAnimation)target;
Animation animation = creatureAnimation.gameObject.GetComponentInChildren<Animation>();
if (animation != null && creatureAnimation.animationPairs.Count <= 0)
{
List<CreatureAnimationPair> newPairs = new List<CreatureAnimationPair>();
foreach (AnimationState anim in animation)
{
newPairs.Add(new CreatureAnimationPair(anim.name, CreatureAnimationType.None));
}
creatureAnimation.animationPairs = newPairs;
EditorUtility.SetDirty(target);
EditorUtility.SetDirty(creatureAnimation);
creatureAnimationSO.ApplyModifiedProperties();
}
In this case, CreatureAnimationPair is an enum set I've made. When I use this on a creature instantiated in the scene, it'll go through all its animations like I want it to and fill out the list of pairs. I can see them in the inspector using my custom GUI just fine. But as soon as I apply that to a prefab version of the creature, all the data in that list gets wiped -- all the strings are emptied and all the enum values become garbage. Why is this happening? How do I get the changes I make in the scene to persist into the prefab?
Your answer
Follow this Question
Related Questions
What is runtime analogy for Editor's PrefabUtility.SetPropertyModifications? 0 Answers
How to save variables in editor, to use them during play mode 0 Answers
Editing prefab fields from custom editor that are not automatically serialized 0 Answers
Unity custom editor, values will not serialize 1 Answer
[JS] [Editor] SerializedObject from a custom class. 0 Answers