Instantiateするとコードがめんどくさくなる件

Instantiate()を使うためには下記がおまけで付いてくるため、dotweenなどで手を加える際に変数のスコープを気にしたり、また単純にコードが増えて複雑な追跡が必要になる。あまり使うべきではないかもしれない。

  • プレハブなどの参照を保持する変数

  • 生成した実体を入れる変数とそのスコープ管理

  • 用済みになった際の破棄や演出などの処理(実体)

  • 上記生成や破棄などが適用される先が、実体かもとの参照になるかの判断(継承やインターフェース実装が挟まると急にダルくなった)

使うべき場所

シューティングとかで同じものを複数画面内に生成するなら使う利点があるが、一度に一つしか表示されないようなもの(自分の場合はチャットやダイアログの窓)を生成するなどではやるだけ無駄で処理も面倒になった。
もともとはゲーム起動時に透明にしたりで不可視化しておき、必要な際に可視化するという処理にしていたのだが、どうしても作業中にシーン内がごちゃついてしまうのでInstantiate()に切り替えたところ明らかにコードが面倒になって実感した。
結果、今後は同様の実装があった場合、カメラ外に実体化しておいて必要な時に瞬間移動させるなどの当初やっていたやり方を基本的な方法として考えることにした。

いつInstantiate()使うのか

Instantiate()を使うのは、先に述べたような同じものを複数画面内に出す必要があり、いつ破棄するか、スコープどうなっているか、変更を適用するのはいつかといった実体化後に気を遣わずに変更&破棄してもよいもののみに限られる…と思う。

チャットやダイアログ窓は演出上フェードかけたり、生成後に操作を受け付けない時間を設ける必要があったり(例えば連打しまくって重要な情報が飛んだりしないようにするとかの対策)、個別に挙動が異なってきてしまうことが大いに考えられる(予め仕様決められたらいいんだけどね)。
instantiateはむしろ例外くらいに思っておいたほうが楽な気がした。


この記事が気に入ったらサポートをしてみませんか?