I have two scripts, they work perfectly, they move the character around and make it jump, but when I apply the courutine, wich works perfectly with a debug log, the jump simply doesnt work, the character doesnt jump anymore when I press the spacebar.
How come is this??
Here are the codes.
TP MOTOR
using UnityEngine;
using System.Collections;
public class TP_Motor : MonoBehaviour {
public static TP_Motor Instance;
public float MoveSpeed = 20f;
public float JumpSpeed = 13f;
public float Gravity = 31f;
public float TerminalVelocity = 60f;
public Vector3 MoveVector { get; set; }
public float VerticalVelocity { get; set; }
void Awake ()
{
Instance = this;
}
public void UpdateMotor ()
{
ProcessMotion();
}
public void ProcessMotion()
{
// First Movevector
// Transform MoveVector to worldspace
MoveVector = transform.TransformDirection(MoveVector);
// Normalize MoveVector if Magnitude > 1
if (MoveVector.magnitude > 1)
MoveVector = Vector3.Normalize(MoveVector);
// Multiply MoveVector by MoveSpeed
MoveVector *= MoveSpeed;
// Reapply VerticalVelocity MoveVector.y
MoveVector = new Vector3(MoveVector.x, VerticalVelocity, MoveVector.z);
// Apply Gravity
ApplyGravity();
// Move the character into world space
TP_Controller.CharacterController.Move(MoveVector * Time.deltaTime);
}
void ApplyGravity()
{
if (MoveVector.y > -TerminalVelocity)
MoveVector = new Vector3(MoveVector.x, MoveVector.y - Gravity * Time.deltaTime, MoveVector.z);
if (TP_Controller.CharacterController.isGrounded && MoveVector.y < -1)
MoveVector = new Vector3(MoveVector.x, -1, MoveVector.z);
}
public void Jump()
{
if (TP_Controller.CharacterController.isGrounded)
VerticalVelocity = JumpSpeed;
}
}
TP CONTROLLER
using UnityEngine;
using System.Collections;
public class TP_Controller : MonoBehaviour
{
public static CharacterController CharacterController;
public static TP_Controller Instance;
float rotateSpeed = 60.0f;
void Awake()
{
CharacterController = GetComponent("CharacterController") as CharacterController;
Instance = this;
}
void Update()
{
GetLocomotionInput();
HandleActionInput();
TP_Motor.Instance.UpdateMotor();
}
void GetLocomotionInput() // INPUTS FOR MOTION
{
var deadZone = 0.1f;
TP_Motor.Instance.VerticalVelocity = TP_Motor.Instance.MoveVector.y;
TP_Motor.Instance.MoveVector = Vector3.zero;
if (((Input.GetAxis("Vertical") > deadZone) && !Input.GetKey(KeyCode.LeftShift)) ||
(Input.GetAxis("Vertical") < -deadZone && !Input.GetKey(KeyCode.LeftShift)))
TP_Motor.Instance.MoveVector += new Vector3(0, 0, Input.GetAxis("Vertical"));
if (Input.GetKey(KeyCode.LeftShift) & Input.GetKey("d"))
TP_Motor.Instance.MoveVector += new Vector3(Input.GetAxis("Horizontal"), 0, 0);
if (Input.GetKey(KeyCode.LeftShift) & Input.GetKey("a"))
TP_Motor.Instance.MoveVector += new Vector3(Input.GetAxis("Horizontal"), 0, 0);
if (Input.GetKey(KeyCode.LeftShift) & Input.GetKey("right"))
TP_Motor.Instance.MoveVector += new Vector3(Input.GetAxis("Horizontal"), 0, 0);
if (Input.GetKey(KeyCode.LeftShift) & Input.GetKey("left"))
TP_Motor.Instance.MoveVector += new Vector3(Input.GetAxis("Horizontal"), 0, 0);
if (((Input.GetAxis("Horizontal") > deadZone) && !Input.GetKey(KeyCode.LeftShift)) ||
(Input.GetAxis("Horizontal") < -deadZone) && !Input.GetKey(KeyCode.LeftShift))
transform.eulerAngles += new Vector3(0, Input.GetAxis("Horizontal") * rotateSpeed * Time.deltaTime, 0);
}
void HandleActionInput()
{
if (Input.GetKeyDown(KeyCode.Space))
{
StartCoroutine(DelayedJump());
}
}
public void Jump()
{
TP_Motor.Instance.Jump();
}
IEnumerator DelayedJump()
{
yield return new WaitForSeconds(1f);
Jump();
}
}