x


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?

more ▼

asked Jun 27 '12 at 03:45 PM

dmcdonough gravatar image

dmcdonough
1 1 2 2

(comments are locked)
10|3000 characters needed characters left

0 answers: sort voted first
Be the first one to answer this question
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x1677
x1260
x181
x5

asked: Jun 27 '12 at 03:45 PM

Seen: 372 times

Last Updated: Jun 27 '12 at 03:45 PM