- Home /
Question by
Bincredible · Oct 29, 2013 at 10:42 PM ·
inputjumpanimationsgrounded
I need help with animations.
Hey, I have a script for movement, although I can't get the jump animations to work properly. I want the initial jump animation to play when space is pressed, then if you're still in the air and press space again, the other jump animation plays, when this has played if you are still in the air the player should start the fall animation. I have had many problems with this whatever way I try to do it. Any help would be nice, here is the current script :
// This makes the character turn to face the current movement speed per default.
var autoRotate : boolean = true;
var maxRotationSpeed : float = 360;
var hoirzontalAxis = "Horizontal";
var verticalAxis = "Vertical";
var jumpButton = "Jump";
var myCam : Camera;
var on = true;
var camFollow : Transform;
var DoubleJump : int;
private var motor : CharacterMotor;
// Use this for initialization
function Awake () {
motor = GetComponent(CharacterMotor);
}
// Update is called once per frame
function Update () {
if (motor.grounded){
if (Input.GetAxis(hoirzontalAxis)){
animation.CrossFade("Run_Forward");
animation["Run_Forward"].speed = 1.7;
if(Input.GetKey(KeyCode.LeftShift)){
animation["Run_Forward"].speed = 3.0;
}
}
if (Input.GetAxis(verticalAxis)){
animation.CrossFade("Run_Forward");
animation["Run_Forward"].speed = 1.7;
if(Input.GetKey(KeyCode.LeftShift)){
animation["Run_Forward"].speed = 3.0;
}
}
if (!Input.GetAxis(hoirzontalAxis) && !Input.GetAxis(verticalAxis)){
animation.CrossFade("Stand_2_");
animation["Stand_2_"].speed = 3.2;
}
}
else{
}
// Get the input vector from kayboard or analog stick
var directionVector = new Vector3(Input.GetAxis(hoirzontalAxis), Input.GetAxis(verticalAxis), 0);
if (directionVector != Vector3.zero) {
// Get the length of the directon vector and then normalize it
// Dividing by the length is cheaper than normalizing when we already have the length anyway
var directionLength = directionVector.magnitude;
directionVector = directionVector / directionLength;
// Make sure the length is no bigger than 1
directionLength = Mathf.Min(1, directionLength);
// Make the input vector more sensitive towards the extremes and less sensitive in the middle
// This makes it easier to control slow speeds when using analog sticks
directionLength = directionLength * directionLength;
// Multiply the normalized direction vector by the modified length
directionVector = directionVector * directionLength;
}
// Rotate the input vector into camera space so up is camera's up and right is camera's right
directionVector = myCam.transform.rotation * directionVector;
// Rotate input vector to be perpendicular to character's up vector
var camToCharacterSpace = Quaternion.FromToRotation(-myCam.transform.forward, transform.up);
directionVector = (camToCharacterSpace * directionVector);
// Apply the direction to the CharacterMotor
motor.inputMoveDirection = directionVector;
motor.inputJump = Input.GetButton(jumpButton);
// Set rotation to the move direction
if (autoRotate && directionVector.sqrMagnitude > 0.01) {
var newForward : Vector3 = ConstantSlerp(
transform.forward,
directionVector,
maxRotationSpeed * Time.deltaTime
);
newForward = ProjectOntoPlane(newForward, transform.up);
transform.rotation = Quaternion.LookRotation(newForward, transform.up);
}
}
function ProjectOntoPlane (v : Vector3, normal : Vector3) {
return v - Vector3.Project(v, normal);
}
function ConstantSlerp (from : Vector3, to : Vector3, angle : float) {
var value : float = Mathf.Min(1, angle / Vector3.Angle(from, to));
return Vector3.Slerp(from, to, value);
}
// Require a character controller to be attached to the same game object
@script RequireComponent (CharacterMotor)
@script AddComponentMenu ("Character/Platform Input Controller")
Comment