Play Animation on Button Press (94525)

I have a bit of a problem, im making a mobile touch pad, so when you use the touch pad the walk animation plays.. when your not touching it the idle animation plays, then I added a onGUI button to play attack when pressed but its not working because the other animations come in the way, I cant figure out how to fix it.. any help??

#pragma strict

@script RequireComponent( CharacterController )

// This script must be attached to a GameObject that has a CharacterController
var moveTouchPad : EasyMobileJoystick;
var jumpTouchPad : EasyMobileJoystick;

var forwardSpeed : float = 4;
var backwardSpeed : float = 4;
var jumpSpeed : float = 16;
var inAirMultiplier : float = 0.25;					// Limiter for ground speed while jumping

var btnTexture : Texture;
var attack = true;

private var thisTransform : Transform;
private var character : CharacterController;
private var velocity : Vector3;						// Used for continuing momentum while in air
private var canJump = true;

function Start()
{
	// Cache component lookup at startup instead of doing this every frame		
	thisTransform = GetComponent( Transform );
	character = GetComponent( CharacterController );	

	// Move the character to the correct start position in the level, if one exists
	var spawn = GameObject.Find( "PlayerSpawn" );
	if ( spawn )
		thisTransform.position = spawn.transform.position;
}

function OnEndGame()
{
	// Disable joystick when the game ends	
	moveTouchPad.Disable();	
	jumpTouchPad.Disable();	

	// Don't allow any more control changes when the game ends
	this.enabled = false;
}

function Update()
{
	var movement = Vector3.zero;

	// Apply movement from move joystick\
	
	//ATTACK BUTTONS

			//
	if ( moveTouchPad.position.x > 0 && attack == true)
	 transform.rotation = Quaternion.Euler(0,90,0);
	animation.Play("walk");
	
	if ( moveTouchPad.position.x < 0 && attack == true)
	transform.rotation = Quaternion.Euler(0,-90,0);
	animation.Play("walk");
	
	if ( moveTouchPad.position.x == 0 && attack == true)
	animation.Play("idle");
	
	if ( moveTouchPad.position.x > 0 )
		movement = Vector3.right * forwardSpeed * moveTouchPad.position.x;
	else
		movement = Vector3.right * backwardSpeed * moveTouchPad.position.x;
	
	// Check for jump
	if ( character.isGrounded )
	{		
		
		var jump = false;
		var touchPad = jumpTouchPad;
			
		if ( !touchPad.IsFingerDown() )
			canJump = true;
		
	 	if ( canJump && touchPad.IsFingerDown() )
	 	{
	 		print("Jump pressed");
			jump = true;
			canJump = false;
	 	}	
		
		if ( jump )
		{
			print("Jump Fired");
			// Apply the current movement to launch velocity		
			velocity = character.velocity;
			velocity.y = jumpSpeed;	
		}
	}
	else
	{			
		// Apply gravity to our velocity to diminish it over time
		velocity.y += Physics.gravity.y * Time.deltaTime;
				
		// Adjust additional movement while in-air
		movement.x *= inAirMultiplier;
//		movement.z *= inAirMultiplier;
	}
		
	movement += velocity;	
	movement += Physics.gravity;
	movement *= Time.deltaTime;
	
	// Actually move the character	
	character.Move( movement );
	
	if ( character.isGrounded )
		// Remove any persistent velocity after landing	
		velocity = Vector3.zero;
}

	function OnGUI() {
		if (GUI.Button(Rect(10,10,50,50),btnTexture))
		attack = false;
				animation.Play("attack");
			}

1 Answer

1

You can play multiple animations and just blend to the attack animation, then blend it back out once the attack is complete. See Animation.Blend() for more information:

See this page on how to use Play() properly with a layer and blending:

Additionally, you may want to use the built-in methods like CrossFade:

In general, take an in-depth look at the Animation reference:

The most likely problem you see right now is that your animation is set to play mode StopSameLayer.