質問: Instantiate(objList[number],position,q); count++; } ``` ### 試したこと position.z += obj.transform.localScale.z; をcount++;の前に挿入してみましたが、想定通りに動いてくれませんでした。 エラーメッセージは表示されていません。 ### 補足情報 当方初心者のため、質問がわかりにくかったり、情報が不足していればご指摘ください。 どうぞよろしくお願いします。
回答: Instantiateの第二引数が`Vector3 position = new Vector3(0, 0, 0);`で固定されているので当然同じ位置に出ますね。 zを3ずつずらす(毎回固定)なら以下。 `Vector3 position = new Vector3(0, 0, count*3.0f);` 大きさを取得したい場合、親は子のサイズを把握していないし、3Dモデルを使っているなら更に計算が面倒臭いです。 (TransformのScale値は「大きさの"割合"」みたいなもの。「3Dモデル(fbxファイルとか)のインスペクターで設定している大きさ×TransformのScale値」なので、後者が同じでも前者が違えば見た目の大きさが変わる。もし子オブジェクト2つが離れていたりしたら更にややこしい) なので「サイズを記載しておくクラス」を作って付与しておく方が楽かと。 ``` //サイズを指定するクラス(プレハブの親に付ける。値はインスペクタから設定しておく) public class PrefabSize : MonoBehaviour { public Vector3 size; } //生成するクラス //クラス変数に以下を用意 private Vector3 stagePosition; void SetStageObjects() { //中略 //本当はpositionは何でもいい GameObject obj = Instantiate(objList[number],position,q); //指定サイズを前回までの位置に加算する stagePosition += obj.GetComponent().size; obj.transform.position = stagePosition; } ``` ※ちなみに子オブジェクトのローカル位置によってズレて見える可能性あります。(例えば「原点=中心」なら半分ずれる) ローカル座標(0,0,0)に子オブジェクトの端が来るように配置するか、PrefabSizeのsize値を調整してください。