即使在 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 fields are not serialized and will reset to default on reset
    private int mySerializedValue;

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