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
とする
[CreateAssetMenu]
public class FloatVariable : ScriptableObject, ISerializationCallbackReceiver
{
public float InitialValue;
[NonSerialized]
public float RuntimeValue;
public void OnAfterDeserialize()
{
RuntimeValue = InitialValue;
}
public void OnBeforeSerialize() { }
}
InitialValue
とするRuntimeValue
とするNonSerialized 属性をつけると、その変数はシリアライズ化されない。シリアライズ化される値 InitialValue
を RuntimeValue
へ代入する。GameObject はシリアライズ化されてない RuntimeValue
を変更する。RuntimeValue
への代入はデシリアライズされた後に行う。
ISerializationCallbackReceiver
インターフェイスを継承すると、シリアライズ前とデシリアライズ後のタイミングに処理が挟める。
参考
Author And Source
この問題について(Scriptable Object の値を保存せずに変更する), 我々は、より多くの情報をここで見つけました https://qiita.com/YutakakINJO/items/8388d05f6a36acd2dec9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .