- Home /
How to play animation once in Input.GetMouseButton
Hi guys, here we go again =)
What I want to do: Play an animation "once" while my RMB(Right Mouse Button) is held down and when the button is released, Play the animation in reverse.
How far I got:
I already have this logic:
if (Input.GetMouseButtonDown (1) && !GS.animation.isPlaying)
{
GS.animation["DefendSword"].speed = 1;
GS.animation.Play ("DefendSword");
}
else if (Input.GetMouseButtonUp (1) && !GS.animation.isPlaying)
{
GS.animation["DefendSword"].speed = -1;
GS.animation.Play ("DefendSword");
}
This work pretty nice, but not for what I want, cuz I need the player to hold the button and not just tap it.
What I already tried:
I tried to change the Input to "GetMouseButton" Instead of "GetMouseButtonDown", in this way my animation runs only while I hold the Button, but its loop... even if I put inside the block code: GS.animation["DefendSword"].wrapMode = WrapMode.Once;
The animation keeps looping while I hold the right click button.
I tried to put the animation in another function, Like this:
public bool Cond;
void DefenseAnima()
{
if (Cond == true)
{
GS.animation["DefendSword"].speed = 1;
GS.animation["DefendSword"].wrapMode = WrapMode.Once;
GS.animation.Play ("DefendSword");
}
}
if (Input.GetMouseButton (1) && !GS.animation.isPlaying)
{
Cond = true;
DefenseAnima();
}
else if (Input.GetMouseButtonUp (1) && !GS.animation.isPlaying)
{
Cond == false;
GS.animation["DefendSword"].speed = -1;
GS.animation.Play ("DefendSword");
}
And the animation still loop, probably because the function "DefenseAnima();" is called per frame.
What could I use as a reference:
I tried to find scripts that allow the player to ZoonIn/ZoonOut cuz anything that use the same logic that I want, will probably help me to find a solution.
If I find a solution I will post here, Peace off.
Answer by Nikes · Mar 08, 2015 at 10:28 PM
Please, tell me if I should edit my question or I can just update my situation in the comments
Update:
I finally fix the problem with the animation looping on "Input.GetMouseButton" this is what I have:
if (Input.GetMouseButton (1) && !GS.animation.isPlaying)
{
GS.animation["DefendSword"].speed = 1;
GS.animation["DefendSword"].wrapMode = WrapMode.ClampForever;
GS.animation.Play ("DefendSword");
}
else if (Input.GetMouseButtonUp (1) && GS.animation.IsPlaying("DefendSword"))
{
GS.animation["DefendSword"].speed = -1;
GS.animation ["DefendSword"].time = animation["DefendSword"].length;
GS.animation["DefendSword"].wrapMode = WrapMode.Once;
GS.animation.Play ("DefendSword");
}
the last thing I need now is to take the current point of the animation when the button is release, so I can play it backward from that point to the start position.
Update 2
Finally I solve the last problem, I just get rid of the line GS.animation ["DefendSword"].time = animation["DefendSword"].length;
after removing it, the animation runs backward automatically from its current point.