- Home /
Crash when setting parent
I have this code:
for (var c : Transform in pw1) {
if (c.gameObject.tag != "WeaponSpawn") {
var temp : Transform = Instantiate(weapons[count], c.position, c.rotation).transform;
temp.localScale = new Vector3(3, 3, 3);
Destroy(c.gameObject);
temp.parent = pw1;
}
}
Basically it's used for changing the weapon on a spaceship - pw1 is a container object, which the weapon is a child of. pw1 is a Tranform. I instantiate the new weapon and destroy the old one, then scale the new one, and that all works nicely. However, when I then try to set the parent of the new weapon, Unity completely crashes and I have to kill it's process. Any ideas why this might be happening? Thanks
If I were you I would just set the weapons as childs for example pw1 and then activate and deactivate the weapons on wish using SetActiveRecursively(false) bzw ...(true). Is this a possibility in your project because I don't think this would cause the unity to crash. This way you wouldn't have to destroy, instantiate weapons and set them parents.
Answer by Bunny83 · Jun 12, 2012 at 03:35 PM
I guess the problem ist that you add new childs to the same transform while you iterate through the children... You should work on a copy:
var childs = new List.<Transform>(pw1);
for (var c : Transform in childs) {
//[...]
}
Yeah I think you're right - I solved it before you answered by putting a yield
statement before setting the parent, so that it would do it in the next frame. I imagine that you're way would also work Thanks :)
Your answer
Follow this Question
Related Questions
Getting the topmost parent 1 Answer
When in the script lifecycle are parent-child relationships applied? 1 Answer
Adressing a Child Object after it´s unparented 0 Answers
Strange movement artifacts when rotating children around parent object 1 Answer
Does transform.root work when a parent is made the child of another object through script? 1 Answer