質問: どうぞよろしくお願いいたします。 現在テトリスを作っていて、Cubeを複数合わせたオブジェクトを複数使っています。 Iの形のオブジェクトの場合はCubeを4つ横に並べ、Lの形の場合は3つを横に並べ、1つを上に乗せている形です。 親オブジェクトにCube(子)が4つ入っている状態です。 横一列が揃った時にそのオブジェクトを消したいのですが、子オブジェクトのみを削除したいので、子オブジェクトの座標を取得して、Y座標がその揃った列のものだけ削除したいと思っています。 foreachかfor文で回すのかなとは想像がつくのですが、ヒエラルキー上全ての子オブジェクトの検索などできますか?Findで名前で検索でしょうか? 思いついた方法を全てやってはみたのですが、上手く動かず... 詳しい方、ご助言を何卒お願いいたします。
回答: やり方は幾つか考えられます。 ・子オブジェクトを示すタグを付けて、GameObject.FindGameObjectsWithTag()で検索 ・親オブジェクトの名前を共通にしておいて、親オブジェクトをFind→その子オブジェクトを取得 (「foreach (Transform child in transform){}」または「GetComponentsInChildren」) ・オブジェクトを生成した時点で、子オブジェクトを変数(配列など)に保存しておく ・ブロックの落下が終了した時点で、子オブジェクトを各列ごとの変数(配列など)に保存しておく ←オススメ Find〜系メソッド、Get〜系メソッドは負荷が高いので、使用頻度は最低限としたいところです。 なので出来るだけTransform[]などの変数に入れてアクセスした方がいいでしょう。 テトリスなら「ブロックが落下しきって固定されるまで」は列が消えるかどうかの判定は不要なので、「必要な時だけ判定を行う」のも負荷軽減に役立ちます。