x


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...

more ▼

asked May 10 '12 at 02:12 PM

sebascontra gravatar image

sebascontra
16 2 5 6

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

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.

more ▼

answered May 10 '12 at 02:22 PM

syclamoth gravatar image

syclamoth
14.8k 7 15 80

hey, thanks a lot, I'm very newbie scripting and don't know if i understood you very well, so let me paste the code again to get the chance of feedback, ok?

    var prefab : GameObject;
    var gridX = 5;
    var gridY = 4;
    var spacing = 2.0;
    var numberOfObjects : int = 20;
    var radius = 2;
    var IsGrid : boolean = true;
    var newObj : GameObject = Instantiate(prefab, pos, Quaternion.identity);
    newObj.transform.parent = transform;


    function Start () 
    {
     if(Input.GetButtonDown("Fire1"))
     IsGrid = !IsGrid;

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

    function ToggleGrid ()
    {
     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);
    }
    }
    }
    }

}

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

bytheway i got this error: expecting (, found 'ToggleGrid'

thanks again,

May 10 '12 at 06:55 PM sebascontra

You declared the function 'ToggleGrid' inside another function!!! You can't possibly expect that to work. You need to understand how functions work in c-like languages: in this case, anything inside the 'Start' function (the bits between the curly braces) will only run when the object gets created. You should remove that entirely, since it's only causing problems for you. You should add the bit for removing the existing grid into the beginning of the 'ToggleGrid' function- don't put it in Start, either.

May 11 '12 at 03:41 AM syclamoth
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x323
x224
x6

asked: May 10 '12 at 02:12 PM

Seen: 757 times

Last Updated: May 11 '12 at 03:41 AM