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!

1 Answer

1

Setting a parent is actually pretty straightforward, and you’ll have to make two small changes to your code.

  1. Store the returned object from your call to Instantiate, which will be a GameObject
  2. 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