Question by
Westy · Oct 03, 2015 at 08:54 PM ·
gameobjecteditor
Replace GameObject Children with For loop and foreach loop missing objects
I'm just trying to make a simple remove and replace with a new gameobject that is a child of a child in a selected gameobject for a editor tool. However, it's literally missing gameobjects. If the child has 2 gameobjects. it's only change number one. if it's got 4, then it'll only change 2 and 4.
void Update(){
gameObjs = Selection.transforms;
if(_canReplace){
Replace2();
}
}
void Replace(){
foreach(Transform gameObj in gameObjs){
foreach(Transform FirstLayer in gameObj){
if(FirstLayer.gameObject.name == "Item" || FirstLayer.gameObject.name == "Colliders"){
continue;
}else{
int times = 1;
foreach(Transform SecondLayer in FirstLayer){
GameObject got = new GameObject(times.ToString());
got.transform.SetParent (SecondLayer.parent);
got.transform.position = SecondLayer.transform.position;
got.transform.rotation = SecondLayer.transform.rotation;
DestroyImmediate (SecondLayer.gameObject);
times++;
}
}
}
}
_canReplace = false;
}
I've hear somethings on the web to try not to use foreach loops But...
void Replace2(){
for(int i = 0; i < gameObjs.Length; i++){
for(int j = 0; j < gameObjs[i].childCount; j++){
if(gameObjs[i].GetChild(j).gameObject.name == "Item" || gameObjs[i].GetChild(j).gameObject.name == "Colliders"){
continue;
}else{
int times = 1;
for(int g = 0; g < gameObjs[i].GetChild(j).childCount; g++){
GameObject got = new GameObject(times.ToString());
got.transform.position = gameObjs[i].GetChild(j).GetChild(g).transform.position;
got.transform.rotation = gameObjs[i].GetChild(j).GetChild(g).transform.rotation;
got.transform.SetParent (gameObjs[i].GetChild(j).GetChild(g).parent);
Debug.Log (gameObjs[i].GetChild(j).GetChild(g).name);
DestroyImmediate (gameObjs[i].GetChild(j).GetChild(g).gameObject);
times++;
}
}
}
}
_canReplace = false;
}
This has the same exact problem. Anyone know why? Thanks
Comment