Scriptable オブジェクトを必要とする Unity 拡張機能を構築しています。Scriptable オブジェクトを使用する場合、ユーザーは ScriptableObject.createInstance() を使用して ScriptableObject から継承するクラスをインスタンス化する必要があります。そのため、インスタンスを完全に初期化するためにインスタンスにさらに情報を提供する必要がある場合は、2 段階の初期化モデルを使用する必要があります。
2 つのステップ (コンストラクターを使用した作成と Init() メソッドを使用した初期化) を使用してオブジェクトを初期化するときのベスト プラクティスを知りたいです。
私が見つけた主な問題は、特殊化されたオブジェクトへの初期化に対応するために派生クラスで Init() メソッドを特殊化する必要があるため、使用されるパラメーターが異なるためにシグネチャが一致しないため、ますます多くの Init() メソッドを取得することです。
この問題に対する2つの解決策に出くわしました:
1) 親メソッドを非表示にし、特殊な型を完全にインスタンス化しない Init() メソッドの例外をスローします。
2) 有効な初期化メソッドのみを公開するラッパー クラスを使用します。
これらは両方とも私には面倒に思えます。だからこそ、他の人がこの問題をどのように克服したかを聞きたいのです。
明確にするための問題の例:
public class Class1 : ScriptableObject
{
public virtual void Init()
{
Debug.Log("Class1::Init()");
}
}
public class Class2 : Class1
{
int myParameter;
public virtual void Init(int parameter)
{
Debug.Log("Class3::Init()");
}
}
//I could now do something like this. And the Class2 object
//Would contain an invalid state because myParameter wasn't initialized
Class2 c= ScritableObject.CreateInstance<Class2>();
c.Init();