What is the best way to make static class fields persistent between Play mode and Edit mode?

I'm trying to create an Editor tool for configuring a component, but I can't seem to find a way to keep its fields persistent when I hit play mode -- all configured information is lost. The optimal solution for me would be to keep this configuration stored in the scene so that it is loaded when the scene is loaded; I'd like to avoid saving the information to a file manually if I can avoid it.

Here's a rough example of what I'd like to keep persistent:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class PersistenceExampleClass : MonoBehaviour
{
    protected static List<Node> _nodes = new List<Node>();

    public static Node AddNode()
    {
        Node result = new Node();
        _nodes.Add( result );
        return result;
    }
}

I have AddNode being triggered by an Editor script, which works successfully; however, entering Play mode any `Node` objects added to `_nodes` are lost. `Node` inherits from `Object`, but not `MonoBehaviour`. Is anyone familiar with a way to keep that information around?

1 Answer

1

Node class must be marked as Serializable with an attribute (and all of its fields that you want to keep must me marked also with SerializeField attribute). Then you will have to mark the _nodes field with SerializeField attribute too, as it is a non-public member of PersistenceExampleClass and this way will not be serialized.