- Home /
Question by
Joyble · Aug 25, 2016 at 04:44 PM ·
charactercontrollerjumping
Animation plays but character isn't jumping
I'm trying to use character controller to jump. Jump animation plays like it should but the character doesn't go up at all.
Here's the script, so if someone can tell me what's wrong with the script and how to fix it, please do.
using UnityEngine;
using System.Collections;
using System;
public class DummyCharJump : MonoBehaviour {
public bool onGround;
public float minJump;
public float delayTime = 0.5f;
private bool allowJump = true;
public float jumpSpeed = 10F;
public float gravity = 20.0F;
public Rigidbody rbody;
private Vector3 moveDirection = Vector3.zero;
// Use this for initialization
void Start ()
{
onGround = true;
minJump = Stats.DummyJMP;
rbody = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
if (onGround && Input.GetButtonDown("Jump"))
{
//Call Delay
StartCoroutine(JumpDelay());
}
//holding jump button//
if (allowJump && onGround)
{
CharacterController controller = GetComponent<CharacterController>();
if (controller.isGrounded) {
moveDirection = new Vector3();
moveDirection = transform.TransformDirection(moveDirection);
if (Input.GetButton ("Jump"))
moveDirection.y = jumpSpeed * minJump;
}
}
}
//Delay then enable Jump
private IEnumerator JumpDelay()
{
yield return new WaitForSeconds(delayTime);
allowJump = true;
}
void OnCollisionEnter(Collision other)
{
if(other.gameObject.CompareTag("ground"))
{
onGround = true;
}
}
}
Comment
Answer by lambmeow · Aug 26, 2016 at 04:47 AM
You have to change Input.GetButtonDown() to Input.GetButton() since GetButton() will return true while the button is pressed down no matter what while GetButtonDown() is only true for the frame that is pressed and will reset to false in the next frame
Also, you have another Input.getButton on your if(AllowAll && onGround ) that is completely unnecessary since :
if (onGround && Input.GetButtonDown("Jump"))
already covers the button input.