- Home /
Question by
Dobres · Feb 24, 2015 at 07:45 PM ·
animationscriptingbasicsjumpingfalling
Adding Jumping and Falling Animations
Hi everyone, I am super new to Unity, not 100% on what I'm doing in C# yet, but I've been following a bunch of tutorials and taking notes. I've come across a bunch of different methods for giving a character jumping and falling animations but I'm never sure where in my script I'm supposed to put those methods or if I'm even using them correctly. I've already set up idle and run animations, but to tell the truth I was mostly aping the code from a tutorial I was watching. Could someone tell me what would be the best method for this script here, where would I put it and what kind of parameters do I need to give it? It would help immensely. Thanks in advance!
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(PlayerPhysics))]
public class PlayerController : MonoBehaviour {
// Player Handling
public float gravity = 20;
public float runSpeed = 8;
public float acceleration = 30;
public float jumpHeight = 12;
private float animationSpeed;
private float currentSpeed;
private float targetSpeed;
private Vector2 amountToMove;
private PlayerPhysics playerPhysics;
private Animator animator;
void Start () {
playerPhysics = GetComponent<PlayerPhysics>();
animator = GetComponent<Animator>();
}
void Update () {
if (playerPhysics.movementStopped) {
targetSpeed = 0;
currentSpeed = 0;
}
animationSpeed = IncrementTowards (animationSpeed, Mathf.Abs (targetSpeed), acceleration);
animator.SetFloat ("Speed", animationSpeed);
//Input
targetSpeed = Input.GetAxisRaw ("Horizontal") * runSpeed;
currentSpeed = IncrementTowards (currentSpeed, targetSpeed, acceleration);
//If player is touching the ground
if (playerPhysics.grounded) {
amountToMove.y = 0;
// Jump
if (Input.GetButtonDown ("Jump")) {
amountToMove.y = jumpHeight;
}
}
// Set amount to move
amountToMove.x = currentSpeed;
amountToMove.y -= gravity * Time.deltaTime;
playerPhysics.Move (amountToMove * Time.deltaTime);
//Face Direction
float moveDir = Input.GetAxisRaw ("Horizontal");
if (moveDir != 0) {
transform.eulerAngles = (moveDir > 0) ? Vector3.up * 180 : Vector3.zero;
}
}
// Increase n towards target by speed
private float IncrementTowards(float n, float target, float a) {
if (n == target) {
return n;
}
else {
float dir = Mathf.Sign(target - n); // must n be increased or decreased to get closer to target
n += a * Time.deltaTime * dir;
return (dir == Mathf.Sign(target-n))? n: target; // if n has now passed target then return target, otherwise return n
}
}
}
Comment