Mt3Zz / Unity-SODatabase

Database of ScriptableObject for Unity
MIT License
0 stars 0 forks source link

ランタイムでIntObject.Addを実行したとき、変更がエディターに残る(ように見える)。 #10

Open Mt3Zz opened 2 days ago

Mt3Zz commented 2 days ago

ゲームを終了したときにUnityエディターの更新がされていないと思われる。 変更後のassetファイルをテキストエディターで開くと変更前の値が残っているし、Unityを再起動すると変更前の値に戻る。

同様の動作はFloatObject.Addにも存在する。他のオブジェクトの値操作メソッドにも同様の動作が存在すると考えられるため、すべてのVariableObjectの値操作メソッドを修正する必要がある。

Mt3Zz commented 2 days ago

_value += amount;としている処理を以下のどちらかに変更すれば直ると考えられる(未確認)。

  1. SerializedObjectにラップしてから変更する
    var serializedObject = new SerializedObject(scriptableObject);
    serializedObject .Update();
    serializedObject .FindProperty("_value").intValue += amount;
    serializedObject .ApplyModifiedProperties();
  2. Unityエディターに変更を知らせる
    Undo.RegisterCompleteObjectUndo(scriptableObject, "test"); // Undoに対応する
    _value += amount;
    EditorUtility.SetDirty(scriptableObject); // Dirtyフラグを立てる
    AssetDatabase.SaveAssets(); // 保存する