How do I make an animation stop when button is no longer pressed? 2D C#,How do I stop animating when Key isn't pressed 2D
I haven't found the answer anywhere so far. Everything in my game works except this. At the moment I simply want my player to play an animation where he looks down then when you release the button, he stops that animation and goes back to idle. I don't know why it's so hard for me to make something so simple LOLOLOL XD I know it's not my animator that's the problem because right now I have it set as (Requires LookDown to be true) to enter the animation and (Requires LookDown to be false) to exit the animation back to Idle. LookDown is set as a bool. Thanks everyone.
Below is my script
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityStandardAssets.CrossPlatformInput;
public class Player : MonoBehaviour { // Config [SerializeField] float runSpeed = 5f; [SerializeField] float jumpSpeed = 5f; [SerializeField] float climbSpeed = 5f; [SerializeField] new Vector2 deathKick = new Vector2(5f, 5f);
// State
bool isAlive = true;
// Cached Component reference
Rigidbody2D myRigidBody;
Animator myAnimator;
CapsuleCollider2D myBodyCollider2D;
BoxCollider2D myFeet;
float gravityScaleAtStart;
// Message then methods
void Start()
{
myRigidBody = GetComponent<Rigidbody2D>();
myAnimator = GetComponent<Animator>();
myBodyCollider2D = GetComponent<CapsuleCollider2D>();
myFeet = GetComponent<BoxCollider2D>();
gravityScaleAtStart = myRigidBody.gravityScale;
}
// Update is called once per frame
void Update()
{
if (!isAlive) { return; }
LookDown();
Run();
ClimbLadder();
Jump();
FlipSprite();
Die();
}
private void LookDown()
{
if (Input.GetKeyDown("down"))
{
myAnimator.SetBool("LookDown", true);
}
if (Input.GetKeyDown("down") == false)
{
myAnimator.SetBool("LookDown", false);
}
}
private void Run()
{
float controlThrow = CrossPlatformInputManager.GetAxis("Horizontal"); // value is betweeen -1 to +1
Vector2 playerVelocity = new Vector2(controlThrow * runSpeed, myRigidBody.velocity.y);
myRigidBody.velocity = playerVelocity;
bool playerHasHorizontalSpeed = Mathf.Abs(myRigidBody.velocity.x) > Mathf.Epsilon;
myAnimator.SetBool("Running", playerHasHorizontalSpeed);
}
private void ClimbLadder()
{
if (!myFeet.IsTouchingLayers(LayerMask.GetMask("Climbing")))
{
myAnimator.SetBool("Climbing", false);
myRigidBody.gravityScale = gravityScaleAtStart;
return;
}
float controlThrow = CrossPlatformInputManager.GetAxis("Vertical");
Vector2 climbVelocity = new Vector2(myRigidBody.velocity.x, controlThrow * climbSpeed);
myRigidBody.velocity = climbVelocity;
myRigidBody.gravityScale = 0f;
bool playerHasVerticalSpeed = Mathf.Abs(myRigidBody.velocity.y) > Mathf.Epsilon;
myAnimator.SetBool("Climbing", playerHasVerticalSpeed);
}
private void Jump()
{
if (!myFeet.IsTouchingLayers(LayerMask.GetMask("Ground")))
{
return;
}
if (CrossPlatformInputManager.GetButtonDown("Jump"))
{
Vector2 jumpVelocityToAdd = new Vector2(0f, jumpSpeed);
myRigidBody.velocity += jumpVelocityToAdd;
myAnimator.SetBool("Jumping", true);
}
else
{
myAnimator.SetBool("Jumping", false);
}
}
private void Die()
{
if (myBodyCollider2D.IsTouchingLayers(LayerMask.GetMask("Enemy")))
{
isAlive = false;
myAnimator.SetTrigger("Dying");
GetComponent<Rigidbody2D>().velocity = deathKick;
}
}
private void FlipSprite()
{
bool playerHasHorizontalSpeed = Mathf.Abs(myRigidBody.velocity.x) > Mathf.Epsilon;
if (playerHasHorizontalSpeed)
{
transform.localScale = new Vector3(Mathf.Abs(transform.localScale.x) * Mathf.Sign(myRigidBody.velocity.x), transform.localScale.y);
}
}
}
Your answer
Follow this Question
Related Questions
2D Dynamic Lights and Shadows 0 Answers
Increase attack speed and animations 1 Answer
Unity 5.2.2 2D c# If lever hit then door open. 0 Answers
transform.localScal not flipping 0 Answers