- Home /
NullReferenceException on TransformArray
Hi
I am trying to make a MoleHandler script to spawn Mole prefabs on the designated places. When a Mole dies it should make its Transform free for other Moles. I store the open places in a Transform[] , but when I try to add a new Transform at runtime, I get the NullReferenceException.
code in mole prefab:
if (DeathTimer >= TimeAfterDeath)
{
Debug.Log ("Sending transform to parent: " + gameObject.transform.position);
transform.parent.SendMessage("AddSpawnPointToArray", this.transform);
Debug.Log("Destroying mole now!");
Destroy(this.gameObject);
}
AddSpawnPointToArray method:
void AddSpawnPointToArray(Transform newSpawn)
{
Debug.Log ("Receiving spawnpoint: " + newSpawn.position);
List<Transform> newSpawnPointsList = new List<Transform>();
foreach (Transform spawn in SpawnPoints)
{
newSpawnPointsList.Add(spawn);
}
newSpawnPointsList.Add(newSpawn);
SpawnPoints = newSpawnPointsList.ToArray();
Debug.Log ("Spawnpoint nr1 end of function: " + SpawnPoints [0].position);
Debug.Log ("nr of Elements in SpawnPoints end of function: " + SpawnPoints.Length);
}
Everything goes great until the function terminates and I try to access any value in SpawnPoints (which is my Transform[] ). I reckon it has something do with passing as reference and then destroying the object? But I've no idea how to pass it as a copy.
Any advice on how to fix this or how to write this simpler is welcome TY
Answer by LaireonGames · Feb 22, 2015 at 08:29 PM
Thats because what you are doing is essentially sending a reference to your transform to your array but then once you call Destroy on the gameobject your transform is also destroyed!
Try cloning the transform (I think you can just do transform.clone) or instead keep a reference to your spawnpoints somewhere else and never destroy them (better solution since cloning and destroying things is always expensive)
Thank you for your answer, but I haven't found a way to clone the transform without the clone getting deleted (by either GC or the Destroy() call)
Your best bet of actually cloning it is to just create a new gameobject and then clone its transform to the one you want to store. $$anonymous$$G:
GameObject temp = new GameObject();
temp.transform = spawnPoint.Clone();
Or if I am just completely imagining this clone method then:
GameObject temp = new GameObject();
temp.transform.position = spawnPoint.position;
temp.transform.rotation = spawnPoint.rotation;
temp.transform.localScale = spawnPoint.localScale;
temp.transform.parent = spawnPoint.parent;
Your answer
![](https://koobas.hobune.stream/wayback/20220613184031im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Error: not a member of 'UnityEngine.GameObject[]'. 2 Answers
object dont destroy, error script 2 Answers
How do you make a transform dissappear from game view on command and reappear when needed? 1 Answer
Destorying and respawning objects with raycasting 2 Answers
How do I duplicate an object to work with a shootemup 0 Answers