どうもどうも、
初心者ゲーム制作者の大和です
自分がゲーム制作の過程で
解決できたことを書いていきます
今回は悩みの種だったオブジェクトの取得について
とくに、
子オブジェクトの取得です
Unityで子オブジェクトをすべて取得したり、1つだったり
自分の認識では、「foreach」ですべてを!
transform.GetChild(子の番号)で一つを!
な、感じです
実際に使っているのは↓
状況に応じでいいとこどりすればいけるだろっ!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChildGet : MonoBehaviour
{
// ステージを取得する
[SerializeField] private List<GameObject> stageList = new List<GameObject>();
void Start()
{
// 親オブジェクト
Transform parentTransform = GameObject.Find("Stage").transform;
// 0番目の子を取得 --- 直接
print(parentTransform.GetChild(0).name);
print("---------------------------------------------------");
// 子をすべて取得 --- すべてをリストに入れる
foreach (Transform child in parentTransform)
{
stageList.Add(child.gameObject);
print(child.name);
}
print("---------------------------------------------------");
// 現在のステージの番号
int nowStageNum = 1;
// リストの中身 --- ついでに一つのステージを表示してみた
for (int i = 0; i < stageList.Count; i++)
{
// 表示するステージ --- 数字は0から、ステージは1から始まるので注意が必要
if (i == nowStageNum) stageList[i].SetActive(true);
print(stageList[i].name);
}
}
}
foreachって、
非表示のオブジェクトも取得できるから便利!
…と、勝手に思っていたら、
「
transform.GetChild(子の番号)」 でも普通に取得できました
「
GameObject.Find」だと、
非表示のオブジェクトを取得できないだけで、
上二つは非表示でもOK!
foreachが便利なのは、
まとめてリストに放り込めることですね
一つ一つマウスで放り込むのは面倒なので
(ソースの // 子をすべて取得 --- すべてをリストに入れるの部分)
↑ 何度もマウスをドラッグ&ドロップ…
ステージ数が多くなると面倒で面倒で(;^_^A
ループで解決できてよかったー