Prefubで作ったオブジェクトを別の親オブジェクトの子にする
こういうことをやりたい
が、UIで作った画像を20個も手で作成するのはめんどくさいので、何とかならないか調べました。
■概要
- Resources.Loadでprefubを読み込む
- Instantiateでprefubを生成する
- 後で操作したいので、それぞれGameObjectにする ※GetComponentで最初から作成したclassにしてしまった方がいい気もする
- SetParentで親を指定する
GameObject[] actorCircle = new GameObject[20]; for (int i = 0; i < actorCircle.Length; i++) { actorCircle[i] = Instantiate((GameObject)Resources.Load("Prefabs/ActorCircle"), new Vector3(835 - i * 45, 450, 0), Quaternion.identity); // effectの読み込み&作成 actorCircle[i].transform.SetParent(cnv.transform); // UIはCanvusの子でないといけないので、予めGameobjectを取得しておいたcnvを親に設定する actorCircle[i].GetComponent<RectTransform>().localScale = new Vector3(0.9f, 0.9f, 0.9f); // SetParentしたことでScaleが変わってしまうので、再設定する }
■不明点
UI全般そうだけど、設定したpositionがどうなってるのか全然わからない
最初canvusに対する相対位置かと思ったけど、そうでもないみたい
Rect transformのpositionをいじれば表示位置が変わるのはわかったけれど、Inspectorで見ても値は据え置きで何がどう変わってるのかさっぱり。
new Vector3(835 - i * 45, 450, 0), は値を少しずつ変えて力業で導き出しました。