Unity 3D のコンポーネント ベースのデザイン モデルに少し問題があります。
私の問題を示す例を次に示します。
class MyComponent : MonoBehaviour
{
MyType entity;
void Start()
{
entity = (MyType)FindObjectsOfType(typeof(MyType)).First();
}
void MyMethod()
{
var x = entity.SomeProperty; // <= NullReference exception
}
}
// ....
var clone = (GameObject)Instantiate(original);
clone.GetComponent<MyComponent>().MyMethod();
常にではありませんが、MyMethod
前に実行されるStart
ことがあるので、最終的に行うことは、通常行うすべての初期化を移動することですStart
。MyMethod
これは非常に醜い回避策です。
void Start() { }
void MyMethod()
{
entity = (MyType)FindObjectsOfType(typeof(MyType)).First();
var x = entity.SomeProperty; // <= now it's fine.
}
私の質問は、このパターンを (コンストラクターなしで) 使用する正しい方法は何ですか?