- Home /
Animate buttons on click.
I'm currently running into a problem with animating GUI elements (like GUI.Button, GUI.Box). I would like to be able to click one button and make the other 3 buttons "slide" off screen before going to the next screen. I'm using Lerp in order to accomplish my goal but the problem is the lerp begins then stops before completing and even with a yield statement it will not allow the lerp to finish before doing anything else before executing the rest of the code.
This is my code:
if(GUI.Button(optionsBox, "Options"))
{
// Makes Start button slide off screen to the left
if(moving == true) return;
moving = true;
startBox = Rect(Mathf.Lerp(25,-100,Time.deltaTime), 0, 200, 100);
yield;
Debug.Log("Button completed moving.");
moving = false;
//Redraw GUI to show options screen
if(moving == false)
{
mainMenu = false;
optionsMenu = true;
creditsMenu = false;
exitWindow = false;
}
}
Is there something that I'm missing or should I just use 3D gameobjects and raycast to get the result that I want?
Answer by rutter · Apr 14, 2012 at 01:12 AM
Lerp()
isn't a looping or yielding function. You give it two numbers, plus a percentage, and it returns another number that is that percentage of the way between them. It does nothing else.
You can use lerps to create a "sliding" effect, but only if you call several of them over time to produce changing values. You can find a few examples of this if you look around the net:
http://forum.unity3d.com/threads/50307-Hoping-for-a-explaination-about-lerp-over-time...
http://answers.unity3d.com/questions/8291/how-to-move-a-gameobject-from-his-position-to-a-xy.html
http://answers.unity3d.com/questions/59458/make-an-object-animate-up-in-the-update-function.html
http://answers.unity3d.com/questions/44194/animate-an-object-to-a-new-position.html
Answer by alvarometon · Jul 09, 2012 at 10:51 PM
Other option is you use switch instead of if to compare the stats (moving == true) or (moving == false)
Like: if (GUI.Button(new Rect(n,70,200,30),"Botao1")) { switch (condicao) { case (Condicao.verdade): condicao = Condicao.falso; break; case (Condicao.falso): condicao = Condicao.verdade; break; } }