- Home /
Room Generator parenting issue
So I have a loops script to create a randomly sized room but all the gameObjects have no parent so they all reference global coordinates rather than the object the script is attached to. Any Ideas?
using UnityEngine;
using System.Collections;
public class Room_Generation : MonoBehaviour {
public GameObject gFloor;
public GameObject gCeiling;
public GameObject gWall;
// Use this for initialization
void Start () {
float fSpacing = 4.0f;
int iRoomWidth = Random.Range(0,4);
int iRoomLength = Random.Range(0,4);
for(int y = 0; y <= iRoomWidth; y++){
for(int x = 0; x <= iRoomWidth; x++){
Vector3 posFloor = new Vector3(x,0,y) * fSpacing;
Vector3 posCeiling = new Vector3(x,1,y) * fSpacing;
Instantiate(gFloor,posFloor,Quaternion.Euler(-90,0,0));
Instantiate(gCeiling,posCeiling,Quaternion.Euler(90,0,0));
}
}
}
PS Im newish at unity and scripting so if you can suggest better ways to do this please go ahead.
Thanks!
Answer by Deprecated · Nov 21, 2013 at 01:54 PM
Setting a parent is actually pretty straightforward, and you'll have to make two small changes to your code.
Store the returned object from your call to Instantiate, which will be a GameObject
Set the GameObject's transform.parent to the parent's transform
Something like:
GameObject gObj = Instantiate(floor,Vector3(x,0,y) * spacing,Quaternion.Euler(-90,0,0));
gObj.transform.parent = childObject.transform.parent.gameObject.transform;
Getting the transform of a script's parent is a bit odd, which is where that childObject reference comes in.
I dont understand the Child object part, could you explain it abit more?
I've updated my script above. It was in JavaScript but I turned it into C#.
Thanks