投稿

1月, 2013の投稿を表示しています

[Unity]インスタンス生成時に引数を渡したい

Unity で、インスタンス生成時にパラメータを設定したいとします。

たとえばプレハブから生成する場合、Object.Instantiate() は引数を取れないので、一般的には以下のように生成後にセットすることになります。

public class MyClass : MonoBehaviour { public int param1 { get; set; } public int param2 { get; set; } void Start(){ Debug.Log("MyClass : param = " + param1 + ", " + param2); } } public class MyTest : MonoBehaviour { public MyClass myClassPrefab; public int paramA; public int paramB; void Awake() { MyClass obj = Instantiate(myClassPrefab) as MyClass; obj.param1 = paramA; obj.param2 = paramB; } }
これでも大きな問題があるわけではありませんが、MyClass の param1, 2 がいつでも外部から書き換え可能になっているので、MyClass 側では初期化以降もパラメータが変わることの考慮や、MyClass を使う側では param1, 2 を後から変えていいのかどうかの判断が必要になります。

コメントで「初期化直後以外は変えるな!」と書いて済ましてしまうのもひとつの手ではありますが、もうちょっと考えてみましょう。(以下、こういう細かい話が続きますよ!)

さて、とりあえず param1, 2 を外部から直接変更できなくして、いかにも初期化時しか呼んではいけなさそうな関数 Initialize() でのみセットできるようにしてみます。

public class MyClass : MonoBehaviour { public int param1 { get; p…