- Home /
Problem setting the parent.
Hi,
I have a problem setting the parent of an instiated prefab. I am working on a random weapon generator, like the one from Borderlands. When I create a weapon, it creates an empty game object prefab, with the following script attached to it, and a rigidbody. The problem is that I get an NullReference when I try to parent the weapon-part prefabs. These are just models with a collider. Any ideas or hints how I can do this? Thanks in advance! PS. I am not a great programmer, just a beginner.
using UnityEngine;
using System.Collections;
public class Creator : MonoBehaviour {
public Transform weaponBodyPref1;
public Transform weaponBodyPref2;
public GameObject weaponBody;
public Transform weaponGripPref1;
public Transform weaponGripPref2;
public GameObject weaponGrip;
public Transform weaponBarrelPref1;
public Transform weaponBarrelPref2;
public GameObject weaponBarrel;
public Transform weaponStockPref1;
public Transform weaponStockPref2;
public GameObject weaponStock;
public Transform weaponMagPref1;
public Transform weaponMagPref2;
public GameObject weaponMag;
public Transform weaponSightPref1;
public Transform weaponSightPref2;
public GameObject weaponSight;
// Use this for initialization
void Start ()
{
createModel();
}
// Update is called once per frame
void Update ()
{
}
void createModel()
{
//Location
Vector3 WeapLoc = new Vector3(this.transform.position.x, this.transform.position.y, this.transform.position.z);
//Weapon Barrel
int weaponBarrelRarity = Random.Range(0, 100);
if(weaponBarrelRarity >= 0 && weaponBarrelRarity <= 29)
{
weaponBarrel = Instantiate(weaponBarrelPref1, WeapLoc, Quaternion.identity) as GameObject;
Debug.Log("Barrel 1");
}
else if(weaponBarrelRarity >= 30 && weaponBarrelRarity <= 100)
{
weaponBarrel = Instantiate(weaponBarrelPref2, WeapLoc, Quaternion.identity) as GameObject;
Debug.Log("Barrel 2");
}
//Weapon Body
int weaponBodyRarity = Random.Range(0, 100);
if(weaponBodyRarity >= 0 && weaponBodyRarity <= 29)
{
weaponBody = Instantiate(weaponBodyPref1, WeapLoc, Quaternion.identity) as GameObject;
Debug.Log("Body 1");
}
else if(weaponBodyRarity >= 30 && weaponBodyRarity <= 100)
{
weaponBody = Instantiate(weaponBodyPref2, WeapLoc, Quaternion.identity) as GameObject;
Debug.Log("Body 2");
}
//Weapon Grip
int weaponGripRarity = Random.Range(0, 100);
if(weaponGripRarity >= 0 && weaponGripRarity <= 29)
{
weaponGrip = Instantiate(weaponGripPref1, WeapLoc, Quaternion.identity) as GameObject;
Debug.Log("Grip 1");
}
else if(weaponGripRarity >= 30 && weaponGripRarity <= 100)
{
weaponGrip = Instantiate(weaponGripPref2, WeapLoc, Quaternion.identity) as GameObject;
Debug.Log("Grip 2");
}
//Weapon Stock
int weaponStockRarity = Random.Range(0, 100);
if(weaponStockRarity >= 0 && weaponStockRarity <= 29)
{
weaponStock = Instantiate(weaponStockPref1, WeapLoc, Quaternion.identity) as GameObject;
Debug.Log("Stock 1");
}
else if(weaponStockRarity >= 30 && weaponStockRarity <= 100)
{
weaponStock = Instantiate(weaponStockPref2, WeapLoc, Quaternion.identity) as GameObject;
Debug.Log("Stock 2");
}
//Weapon Mag
int weaponMagRarity = Random.Range(0, 100);
if(weaponMagRarity >= 0 && weaponMagRarity <= 29)
{
weaponMag = Instantiate(weaponMagPref1, WeapLoc, Quaternion.identity) as GameObject;
Debug.Log("Mag 1");
}
else if(weaponMagRarity >= 30 && weaponMagRarity <= 100)
{
weaponMag = Instantiate(weaponMagPref2, WeapLoc, Quaternion.identity) as GameObject;
Debug.Log("Mag 2");
}
//Weapon Sight
int weaponSightRarity = Random.Range(0, 100);
if(weaponSightRarity >= 0 && weaponSightRarity <= 29)
{
weaponSight = Instantiate(weaponSightPref1, WeapLoc, Quaternion.identity) as GameObject;
Debug.Log("Sight 1");
}
else if(weaponSightRarity >= 30 && weaponSightRarity <= 100)
{
weaponSight = Instantiate(weaponSightPref2, WeapLoc, Quaternion.identity) as GameObject;
Debug.Log("Sight 2");
}
GameObject mainWeap = GameObject.Find("newSMG(clone)");
weaponBody.gameObject.transform.parent = mainWeap.gameObject.transform;
weaponGrip.gameObject.transform.parent = mainWeap.gameObject.transform;
weaponMag.gameObject.transform.parent = mainWeap.gameObject.transform;
weaponBarrel.gameObject.transform.parent = mainWeap.gameObject.transform;
weaponStock.gameObject.transform.parent = mainWeap.gameObject.transform;
weaponSight.gameObject.transform.parent = mainWeap.gameObject.transform;
}
}
I have updated the script to the most recent version (added all the weapon parts and tried various methods for the parenting), but I still can't figure out the answer. Please help me out!
Do you get the debugs "Body X" and "Grip X" ? I suspect you never actually enter those and weaponBody/weaponGrip are null
I indeed do not get the debugs. However, the actual prefabs do get created, with colliders and everything. But yet it gives me the Null Reference,
Answer by FirePlantGames · Nov 10, 2013 at 04:19 PM
Maby try gameObject.transform?
I have tried it, but still no good. I have also tried this.gameObject.transform and this.transform, but those work neither.