Question by
daniel5121 · Feb 12, 2018 at 09:25 PM ·
animationdelaycontrols
(2D Platformer) Controls with gliding animation
I have made it so when i hold space bar it starts the gliding animation but jump is also space so now it sometimes glides when it is meant to jump so how can i set it so space has to be held down for a longer time for it to start the glide animation here is my current script for player controller:
using UnityEngine; using System.Collections;
public class PlayerController : MonoBehaviour {
public float moveSpeed;
private Rigidbody2D myRigidbody;
public float JumpSpeed;
public Transform groundCheck;
public float groundCheckRadius;
public LayerMask whatIsGround;
public bool isGrounded;
private Animator myAnim;
public Vector3 respawnPosition;
public LevelManager theLevelManager;
public Sprite[] DeathsSprites;
public bool PlayerDead = false;
public float DeathSpriteAnimTime = 0.1f; // delay between changing Death Sprites
// Use this for initialization
void Start()
{
myRigidbody = GetComponent<Rigidbody2D>();
myAnim = GetComponent<Animator>();
respawnPosition = transform.position;
theLevelManager = FindObjectOfType<LevelManager>();
}
float GliderTimerDelay = 0.3f;
float CurrentGliderDealy = 0;
// Update is called once per frame
void Update()
{
if (PlayerDead) // check if we are dead dont let the player to move
return;
isGrounded = Physics2D.OverlapCircle(groundCheck.position, groundCheckRadius, whatIsGround);
if (!isGrounded)
{
CurrentGliderDealy += Time.deltaTime;
}
else
{
CurrentGliderDealy = 0;
}
if (Input.GetAxisRaw("Horizontal") > 0f)
{
myRigidbody.velocity = new Vector3(moveSpeed, myRigidbody.velocity.y, 0f);
transform.localScale = new Vector3(0.4f, 0.4f, 0.3f);
}
else if (Input.GetAxisRaw("Horizontal") < 0f)
{
myRigidbody.velocity = new Vector3(-moveSpeed, myRigidbody.velocity.y, 0f);
transform.localScale = new Vector3(-0.4f, 0.4f, -0.3f); //^ use theese two to make the body turn to face direction when pressing a or d
}
else
{
myRigidbody.velocity = new Vector3(0, myRigidbody.velocity.y, 0f);
}
if (Input.GetButtonDown("Jump") && isGrounded)
{
myRigidbody.velocity = new Vector3(myRigidbody.velocity.x, JumpSpeed, 0f);
}
if ( Input.GetButton("Jump") && CurrentGliderDealy >= GliderTimerDelay)
{
myRigidbody.velocity = new Vector3(myRigidbody.velocity.x, 0, 0f);
myAnim.SetFloat("Glide", Mathf.Abs(myRigidbody.velocity.x));
}
else
{
myAnim.SetFloat("Speed", Mathf.Abs(myRigidbody.velocity.x));
}
myAnim.SetBool("Grounded", isGrounded);
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("KillPlane"))
{
//gameObject.SetActive(false);
//transform.position = respawnPosition;
theLevelManager.Respawn();
}
else if (other.CompareTag("Checkpoint"))
{
respawnPosition = other.transform.position;
}
}
void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.tag == "MovingPlatform")
{
transform.parent = other.transform;
}
}
void OnCollisionExit2D(Collision2D other)
{
if (other.gameObject.tag == "MovingPlatform")
{
transform.parent = null;
}
}
}
Comment