Scriptable Object の値を保存せずに変更する


結果 : Scriptable Object の値を保存せずに変更する方法 がわかる。

Unity Editor 上でゲーム中に Scriptable Object の値を変更すると、その値が保存される。値を保存せずに変更する方法を示す。

解決 : NonSerialized な filed を編集する。

[CreateAssetMenu]
public class FloatVariable : ScriptableObject, ISerializationCallbackReceiver
{
    public float InitialValue;

    [NonSerialized]
    public float RuntimeValue;

public void OnAfterDeserialize()
{
        RuntimeValue = InitialValue;
}

public void OnBeforeSerialize() { }
}
  • シリアライズされる変数を InitialValue とする
  • シリアライズされない変数を RuntimeValue とする

NonSerialized 属性をつけると、その変数はシリアライズ化されない。シリアライズ化される値 InitialValueRuntimeValue へ代入する。GameObject はシリアライズ化されてない RuntimeValue を変更する。RuntimeValue への代入はデシリアライズされた後に行う。

ISerializationCallbackReceiver インターフェイスを継承すると、シリアライズ前とデシリアライズ後のタイミングに処理が挟める。

参考