()をGetComponentで使う<>と間違えることもしばしばあるので気を付けましょう。このGameObjectの特徴としては、どのオブジェクトでも取得可能です。簡単なコードでできるので、ぜひやってみてください。今回は、Unityで子オブジェクトの数を判定する方法を紹介します。ゲーム制作をしてプログラミング学習している大学生です。先ほどのプログラムでCube1の状態を非アクティブにして実行してみてください。このように「値がありません」というエラーが起こります。マスターしていきましょう。細かい分類もあるので、それぞれ特徴と使い方を詳しく説明していきますね。オブジェクトを格納する変数をpublic(公開)にしてインスペクター上で入れてしまう方法です。for文などを利用して配列に格納することで実装できます。いうことで、今回はGameObjectの取得方法について学びました。これはよく起こるエラーですので、注意をしてくださいね。次はtransform.Find関数を利用した方法です。Unityの実行をして確認したところ、すべて他のゲームオブジェクトの取得が出来ました。GameObject.Findは特に、すべてのオブジェクトを対象にしているのでなおさらです。オブジェクトの取得はできる限り一回で、Startメソッドなどで利用するようにしましょう。この方法だと、非アクティブなオブジェクトは取得できません。変数の公開設定(publicやprivate)については「UnityのC#で使う変数と宣言方法【共有の仕方も教えます】」で解説していますので、参考にどうぞ。このように、宣言すれば、インスペクター上で操作が可能です。取得したいオブジェクトを選択すればOKです。次はGameObject.Find関数を使った取得方法です。HDRPでMMDキャラクターの絵作りをしました。「GameObject.Find」は、Hierarchyから指定した「GameObject」を取得する関数です。取得されるのが「GameObject」ではなく「Transform」であることに注意が必要です。「Transform.Find」では、アクティブ・非アクティブに関係なく取得することできます。以下ようなファイル構成になっている場合のGameObjectの取得方法を見ていきましょう。一つのオブジェクトに複数のColliderを設定する際に、子にColliderを持たせることがあるかと思います。Transform.Findを使えば、target_1が非アクティブでも取得可能ですね。注意が必要なのは、Transform.Findを使ったときは「Transform」で取得されることです。例2では「.gameObject」として、TransformからGameObjectを取得しています。今回の場合、GameObject.Findの使用ではtarget_2を取得することはできません。次にゲームオブジェクト3から他のゲームオブジェクトを取得するScript3を記述します。親や子オブジェクトも含めた範囲から指定のコンポーネントを取得するメソッドを作成しました。この方法を使うことで子オブジェクトの数を数えることができるというのはもちろんのこと、オブジェクトが0個になった時に実行するという使い方もできます。このコードの実行例は私の場合、「子オブジェクトが0個になったら親オブジェクトを削除する」という使い方をしました。この方法をとった理由は、子オブジェクトがなくなった邪魔なオブジェクトを削除するためです。このようにするだけで、子オブジェクトの数が0個になった親オブジェクトを削除することができます。今回とは別の処理をする時には、Destroy(this.gameObject);の部分を任意の処理に変更しましょう。1や2に変更することで子オブジェクトの数が2個だったら、というように指定できます。他にも、子オブジェクトが無くなった時だけ動作する処理などを追加する時にも使えるのでぜひ試してみてはいかがでしょうか。便利なアプリの紹介など幅広く雑多に記録するブログ。使い方は先ほどのGameObject.Findと一緒です。【Unity】オブジェクトを参照する際、入門書ではGameObject.Findを使用していますが、これは負荷が高く、多用は推奨されておりません。指定したGameObjectを見つけ出すため、時間もかかり、重くなる原因になります。子オブジェクトの検索の場合には「Transform.Find」を使うようにしましょう。しても使用したいのであれば、Start関数かAwake関数の中だけにすることです。子要素を取得するには、GameObject.transform.FindChildメソッドを利用します。引数には子要素の名前を与えます。GetChildの利点は番号で子オブジェクトを取得できるところです。transform.Findは子オブジェクトだけを対象としています。名前を変えたりしたらコードも変更しないといけません(なかなか面倒)。GetChildなら順番で決まるため、複数のオブジェクトを取得することもできます。transform型とは位置や回転などの情報を持つコンポーネントです。ように、後ろに.gameObjectとくっつければ型をGameObject型に変えることができます。transform.Findであれば非アクティブなオブジェクトでも取得可能です。cube1はGameObject.Findで、cube2はtransform.Findで取得します。サンプルのプログラムを作り実行してみます。今、Sampleというスクリプトを用意し、Cube0とCube1というオブジェクトを設置します。SampleスクリプトはCube0にアタッチしましょう。上の例で見ると、「名前」の部分は”Cube1′′ですね。()内はstring型(文字列)で入れないといけないので””(ダブルクオーテーション)でくくりましょう。今回は、Unityで子オブジェクトの数を判定する方法を紹介します。この方法を使うことで子オブジェクトの数を数えることができるというのはもちろんのこと、オブジェクトが0個になった時に実行するという使い方もできます。kan_kikuchiさんは、はてなブログを使っています。UIのコンポーネントを使わずに、スクリプト1つでUIすべてを取得できるので便利です。コストが大きいということは、手間がかかるということで、やたらに使いまくると動きが遅くなります。Unityでゲーム制作していく中でオブジェクト取得の必要が出てきます。オブジェクトの取得にはGameObject.Findやtransform.Findなどが使えます。子要素のみだったり、非アクティブは取得不可など特徴と使い方を学びましょう。新作は札束風呂VRや神巫女。transform.Findで出てきますが、親子関係とかそういうのを全く無視して、ヒエラルキー上にあるものすべてが対象になります。これだけ聞いてもよく分からないと思うので、transfer.Findの部分でもう一度おさらいしましょう。基本的に「オブジェクトを探して取得する」というのはコストが大きいです。「GameObject.Find」は、Hierarchyから指定した「GameObject」を取得する関数です。指定したGameObjectを見つけ出すため、時間もかかり、重くなる原因になります。完成品のゲームでの使用は極力控えた方が良いみたいです。