前提・実現したいこと
「ScriptableObject」を継承したクラスにカラムを追加した時に、以前作成したアセットデータと互換性を持たせたいと思っています。
例えば、以下のようなクラスを用いて作成したアセットデータがあったとします。
変更前のクラス
C#
1public class TestData : ScriptableObject 2{ 3 public int mMaxHp; 4 public int mAttack; 5 public int mDefense; 6}
その後、「TestData」クラスに「速さ」を設定する必要が出てきたため、下記のようにカラムを追加したいと考えています。
変更後のクラス
C#
1public class TestData : ScriptableObject 2{ 3 public int mMaxHp; 4 public int mAttack; 5 public int mDefense; 6 public int mSpeed; // 速さに関するカラムを追加した 7}
ここで、「変更前のクラス」で作成したアセットデータを「変更後のクラス」クラスで読み込み、「変更後のクラス」の形式で出力するようにしたいと考えています。
追加した「mSpeed」の変数には「0」など、適当な値で埋めて出力する予定です。
どのような実装をすれば、上記を実現できるか教えていただけないでしょうか。
試したこと
変更前のクラスを継承して、カラムを追加する方法を試してみました。
以下のような形式です。
C#
1public class TestData2 : TestData 2{ 3 public int mSpeed; // 速さに関するカラムを追加した 4}
ですが、アセットデータをロードする時に「TestData 」の形式なのか「TestData2 」の形式なのか判定する方法が分かりません。
アセットのロード時にどちらのクラスか分かれば、コンバート処理を走らせることができそうです。
また、以下のような形式も検討しました。
C#
1// 元のクラス 2public class TestData : ScriptableObject 3{ 4 public int mMaxHp; 5 public int mAttack; 6 public int mDefense; 7} 8// 元のクラスとは別のクラス 9public class TestData2 : ScriptableObject 10{ 11 public int mMaxHp; 12 public int mAttack; 13 public int mDefense; 14 public int mSpeed; // 速さに関するカラムを追加した 15}
どちらにせよ、アセットデータに対して、どのクラスのなのか判定する必要があると考えています。
上記の判定について教えていただけないでしょうか。
また、別の方法があれば、どのような方法になるのか教えていただけないでしょうか。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。