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.

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.