UnityでRPGを作ってみる

UnityでRPGを作ってみる

Prefubで作ったオブジェクトを別の親オブジェクトの子にする

こういうことをやりたい
が、UIで作った画像を20個も手で作成するのはめんどくさいので、何とかならないか調べました。

f:id:allmoreidea:20180728115042j:plain

■概要

  1. Resources.Loadでprefubを読み込む
  2. Instantiateでprefubを生成する
  3. 後で操作したいので、それぞれGameObjectにする ※GetComponentで最初から作成したclassにしてしまった方がいい気もする
  4. 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),  は値を少しずつ変えて力業で導き出しました。