- 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. 
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                