unity3d 即使在PlayMode中,ScriptableObjects也会在编辑器中序列化

示例

访问ScriptableObject实例中的序列化字段时,应格外小心。

如果public通过标记或序列化了一个字段SerializeField,则永久更改其值。当退出播放模式时,它们不会像MonoBehaviours一样重置。有时这可能很有用,但也会造成混乱。

因此,最好使序列化字段为只读,并完全避免使用公共字段。

public class MyScriptableObject : ScriptableObject
{
    [SerializeField]
    int mySerializedValue;

    public int MySerializedValue
    {
        get { return mySerializedValue; }
    }
}

如果您希望在播放会话之间重置的ScriptableObject中存储公共值,请考虑使用以下模式。

public class MyScriptableObject : ScriptableObject
{
    // 专用字段未序列化,重置后将重置为默认值
    private int mySerializedValue;

    public int MySerializedValue
    {
        get { return mySerializedValue; }
        set { mySerializedValue = value; }
    }
}