23
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Unity】親オブジェクトについたスクリプトから子オブジェクトを操作する!

Posted at

#はじめに
はじめまして。
この記事はUnity5.5時のものです。
訂正箇所などありましたら、お手数ですがコメントをください。

#親オブジェクト?子オブジェクト?
Unityには「親子関係」というものがあります。

parent.png
これ(AI)が親!

children.png
これら(Cubeとmagic_ring_05)が子供!

この親オブジェクトについたスクリプトから、複数の子オブジェクト及び特定の子オブジェクトを操作する方法を紹介します。
予想以上に簡単です!

#スクリプト

transform.GetChild(n).gameObject.~

これひとつで済みます!

#解説
##transform
ここでは親オブジェクトにスクリプトが付いていることを想定しています。
なのでこのtransformは親オブジェクトのものとなります。

もし他のゲームオブジェクトに付いているスクリプトから操作したいときは

public Transform (他のゲームオブジェクトの名前);

と宣言して、インスペクタから他のゲームオブジェクトを設定して

(他のゲームオブジェクトの名前).GetChild(n).gameObject.~

とすると良いと思います。

##GetChild(n)
nは子オブジェクトの番号です。
子オブジェクトには、上から順に0,1,2,3,…と番号が割り振られています。

number.png

例えば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 () {
	
}
23
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?