In Unity3D, I'm getting better performance when using if-else inside nested foreach (similarly nested FOR), instead of having a 3rd level nested foreach inside.
The problem is that I thought writing the code, as shown below was not the correct and/or optimized way of writing code.
foreach(GameObject element in all_elements_on_screen)
{
foreach(Transform child in element.transform)
{
if (child.GetComponent < SpriteRenderer > ().sprite == TileA || child.GetComponent < SpriteRenderer > ().sprite == TileB ||
child.GetComponent < SpriteRenderer > ().sprite == TileC || child.GetComponent < SpriteRenderer > ().sprite == TileD ||
child.GetComponent < SpriteRenderer > ().sprite == TileE || child.GetComponent < SpriteRenderer > ().sprite == TileF ||
child.GetComponent < SpriteRenderer > ().sprite == TileG || child.GetComponent < SpriteRenderer > ().sprite == TileH ||
child.GetComponent < SpriteRenderer > ().sprite == TileI || child.GetComponent < SpriteRenderer > ().sprite == TileJ ||
child.GetComponent < SpriteRenderer > ().sprite == TileK || child.GetComponent < SpriteRenderer > ().sprite == TileL ||
child.GetComponent < SpriteRenderer > ().sprite == TileM || child.GetComponent < SpriteRenderer > ().sprite == TileN ||
child.GetComponent < SpriteRenderer > ().sprite == TileO || child.GetComponent < SpriteRenderer > ().sprite == TileP ||
child.GetComponent < SpriteRenderer > ().sprite == TileQ || child.GetComponent < SpriteRenderer > ().sprite == TileR ||
child.GetComponent < SpriteRenderer > ().sprite == TileS || child.GetComponent < SpriteRenderer > ().sprite == TileT) {
Destroy(child.GetComponent < PolygonCollider2D > ());
}
else
{
child.gameObject.AddComponent < PolygonCollider2D > ();
}
}
}
Therefore, I tidied (made it more optimized?) the code by creating another nested foreach loop:
foreach(GameObject element in all_elements_on_screen)
{
foreach(Transform child in element.transform)
{
foreach(Sprite crater_texture in textures_craters)
{
if (child.GetComponent < SpriteRenderer > ().sprite == crater_texture)
{
Destroy(child.GetComponent < PolygonCollider2D > ());
}
else
{
child.gameObject.AddComponent < PolygonCollider2D > ();
}
}
}
}
Both of these snippets do the exact same thing, EXCEPT the latter piece of code takes more time to load/run than the former. Why is that happening? is there any other way of optimizing this piece of code so it runs faster?
Aucun commentaire:
Enregistrer un commentaire