If /else statement can be used like this?

Hi everybody,

I’m trying to switch from a grid to a circle representation of a GameObject (prefab), but I cannot get the transition correctly,
here is the code:

it should instantiates a prefab in a grid

    var prefab : GameObject;
    var gridX = 5;
    var gridY = 4;
    var spacing = 2.0;
    
    var numberOfObjects : int = 20;
    var radius = 2;
    var IsGrid : boolean = true;
    
    
    function Start () 
    {
     if(Input.GetButtonDown("Fire1"))
     IsGrid = !IsGrid;
     
     if(IsGrid == false)
     {
     	for(var i = 0; i<numberOfObjects;i++){
     		var angle = i * Mathf.PI * 2 / numberOfObjects;
     		var pos = Vector3 (Mathf.Cos(angle),0,Mathf.Sin(angle))*radius;
     		Instantiate(prefab,pos,Quaternion.identity);
     	}
     }
     else
     {
     	
    for (var y = 0; y < gridY; y++) {
    for (var x = 0; x < gridX; x++) {
    var pos2 = Vector3 (x, 0, y) * spacing;
    Instantiate(prefab, pos, Quaternion.identity);
    }
    }
    }

}

and pressing “Fire1” key, should change to the circle, does it make sense? how can i do it?

thanks in advance for anyhelp…

The ‘Start’ function only gets called once- in the first frame that the object exists. So, it only checks the fire button once- when it is first created. If you want a transition, you will need to do a few things.

1: Keep track of the currently existing objects. If you don’t know what you’ve already created, you won’t be able to delete them before creating the other pattern!

Simplest way to do this is to use one of the features of transform parenting. In your instantiation code, do this:

var newObj : GameObject = Instantiate(prefab, pos, Quaternion.identity);
newObj.transform.parent = transform;

This will make all the new object children of the controller.

Then, when you switch patterns, do this:

for(var trans : Transform in transform)
{
    Destroy(trans.gameObject);
}

This will automatically delete all the children of the controller’s transform!

Then, refactor it a bit. Put everything between about ‘if(!isGrid)’ and the end of the bit that spawns the grid into a new function:

function ToggleGrid()
{
    // put it here!
}

Then to activate it, do this:

function Update()
{
    if(Input.GetButtonDown("Fire1"))
    {
        IsGrid = !IsGrid;
        ToggleGrid();
    }
}

Remember to delete the previous pattern before instantiating the new one.