どうも、チャーさんです。
この記事ではunityのforeachループで
get componentする方法を書きます。
なのでこの記事を読めば、
foreachを使い複数のオブジェクトの
コンポーネントを取得することが
できるようになります。
ゲームで言えば全ての敵オブジェクトの
コンポーネントを取得とかもできます。
ということでforeach内でget component
を使い上記のようなことをしたい場合、
このまま読んでみてください。
スポンサードサーチ
目次
unityでforeach内でget componentする方法
でまず先に記述方法だけ知りたい
場合のためにforeachでget componentするための
記述法を書いときます。
それは以下です。
foreach(変数型 変数名 in 配列名){
変数名.GetComponent<コンポーネント名>();
}
これで配列に格納した、要素の
コンポーネントをループを回して取得できます。
スポンサードサーチ
unityでforeach内でget componentする手順詳細
でここからは上の説明だけでは
わからないという場合のために
やり方を書いておきます。
foreachでget componentする方法ですが、
1、まずは取得したいオブジェクト達を
入れる配列を用意する。
2、配列の中に、要素を取得する。
3、foreachの中で、
変数名.GetComponent<取得したいコンポーネント名> ();
を書けばokです。
とゆうことでコード例を出しながら詳しく説明します。
配列の準備
まず、foreachを使うには、配列が
必要です。
というのもforeachとは配列にある要素数
だけループを回すというものだからです。
なのでスクリプトの中で、
配列の変数名を書きます。
で、unityのC#での配列の宣言の書き方は、
変数型[] 変数名;
です。
配列の際は変数型の後ろに[]を
つけるのに注目しましょう。
コード例をだすと、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class forExplain : MonoBehaviour {
GameObject[] enemies ; //ここで配列を宣言
}
という感じです。
(サンプルコードでは複数の敵ゲームオブジェクトを
取得する体で説明していきます)
配列に要素を格納する
で、これで配列の宣言はできたので、
次にこの配列に要素を入れましょう。
で要素の取得方法ですが、
ここではシーン上に複数のオブジェクトが
設置してあるという体で書きます。
でその場合、
GameObject.FindGameObjectsWithTag (“取得したいタグ名”);
という記述が使えます。
で、この記述は何かと言うと、
複数の任意のゲームオブジェクトを見つけて
配列に要素として突っ込んでくれます。
オブジェクトの選り分けですが、
()内の取得したいタグ名で、選り分けできまして、
任意のタグがついてるオブジェクトを取得してくれます。
なので敵オブジェクト達を配列に
入れたければ、
GameObject.FindGameObjectsWithTag (“enemy”);
と記述して、敵オブジェクトのタグの部分に、
enemyをつけましょう。
するとenemyというタグがついた
オブジェクトのみが配列に格納されます。
タグで配列に取得する要素を分ける
ちなみにオブジェクトへのタグの付け方は、
オブジェクトを選択し、
インスペクター上にあるtagをクリックし、
Add Tagをクリック。
次に、list is emptyの横の+を
クリックし、
例えばここでは例として、
enemyと書いてsaveボタンをクリックしましょう。
するとタグ一覧に表示されるようになります。
選んでクリックしましょう。
するとオブジェクトにタグがつきます。
そしてサンプルコードとしましては、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class forExplain : MonoBehaviour {
GameObject[] enemies ; //ここで配列を宣言
// Use this for initialization
void Start () {
enemies = GameObject.FindGameObjectsWithTag (“enemy”);
//ここで配列に要素を取得
}
}
という感じでして、
上記コードでは、
再生ボタンを押した瞬間に、
enemyというタグがついたオブジェクトを
探して、enemyタグがついたオブジェクトを
全て配列に格納してくれます。
foreachループでget componentする
なのであとはここまでくれば、あとは
foreachでget componentするだけです。
でforeachでget componentするですが、
記述法をもう一度説明しますと、以下です。
foreach(変数型 変数名 in 配列名){
変数名.GetComponent<コンポーネント名>();
}
この記述で配列に代入した要素全ての、
コンポーネントをループを回して取得できます。
ちなみに上記だとわかりにくいかと思うので、
サンプルコードをかくと、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class forExplain : MonoBehaviour {
GameObject[] enemies ; //ここで配列を宣言
// Use this for initialization
void Start () {
enemies = GameObject.FindGameObjectsWithTag (“enemy”);
//ここで配列に要素を取得
}
void Update () {
foreach (GameObject enemy in enemies) {
代入先の変数名 = enemy.GetComponent<コンポーネント名> ();
}
}//ここでfroeach内でget componentさせる
}
という感じです。
こうすれば、foreachループの中で、
それぞれのオブジェクトのコンポーネントを
取得できるので、
例えば全ての敵のhpをループで取得
することも可能です。
またタワーディフェンス系で必要な、
全ての敵オブジェクトとタワーとの
距離を測ることも可能になります。
スポンサードサーチ
まとめ
ちょいと難しかったと思いますが、
まとめです。
foreach内でループするには、
配列を用意し、要素を取得し、
foreach内でget componentの記述を書きましょう。
さて、ということで早速あなた自身でも
チャレンジしてみましょう。
まずはスクリプトを用意し、
配列の宣言から初めてみてください。
ということで、以上でforeachで
複数のオブジェクトのコンポーネントを
get componentする方法でした。
それでは、読んでもらってありがとうございました。
チャーさん