即使在 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; }
}
}