#はじめに
はじめまして。
この記事はUnity5.5時のものです。
訂正箇所などありましたら、お手数ですがコメントをください。
#親オブジェクト?子オブジェクト?
Unityには「親子関係」というものがあります。
この親オブジェクトについたスクリプトから、複数の子オブジェクト及び特定の子オブジェクトを操作する方法を紹介します。
予想以上に簡単です!
#スクリプト
transform.GetChild(n).gameObject.~
これひとつで済みます!
#解説
##transform
ここでは親オブジェクトにスクリプトが付いていることを想定しています。
なのでこのtransformは親オブジェクトのものとなります。
もし他のゲームオブジェクトに付いているスクリプトから操作したいときは
public Transform (他のゲームオブジェクトの名前);
と宣言して、インスペクタから他のゲームオブジェクトを設定して
(他のゲームオブジェクトの名前).GetChild(n).gameObject.~
とすると良いと思います。
##GetChild(n)
nは子オブジェクトの番号です。
子オブジェクトには、上から順に0,1,2,3,…と番号が割り振られています。
例えばCubeだけを操作したいときは
AI.GetChild(0).gameObject.~
というように書きます。
AIの子オブジェクト全てを操作したいときは
foreach(Transform child in transform)
とtransform(この記事の場合は親オブジェクトのこと!)の
子オブジェクトのtransformを取ってきて、
child.gameObject.~
とすると良いと思います。
#使用例
ここでは、AIの子オブジェクトのMeshRendererを消してみます!
AIに以下のスクリプトをくっつけると、開始直後にCubeの見た目を消してくれます。
void Start () {
transform.GetChild(0).gameObject.GetComponent<MeshRenderer>().enabled = false;
}
void Update () {
}
他の例として、AIの子オブジェクト全てを非Activeにするときはこんな感じで書きます。
void Start () {
foreach (Transform child in transform)
{
child.gameObject.SetActive(false);
}
}
void Update () {
}