- Home /
Question by
Ryuzaki123 · Apr 27, 2018 at 10:20 AM ·
game development
CharacterController (Unity) not jumping near objects
So the core issue is that, every time I stand near a (say) box, and try to jump while holding the move_forward key("W" here), the character just kind of vibrates in place, on the y-axis, and doesn't jump. (If I just press jump without pressing W, the character jumps perfectly).
This is the script that handles the jump(sorry for the extra code, it also handles some other mechanics like double jump and dash).
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMotor : MonoBehaviour {
public float verticalVelocity = 0;
public float jumpForce = 10.0f;
public float dashForce = 0.1f;
public float gravity = 14.0f;
public float resistance = 14.0f;
public CharacterController charController;
public BootEnergy energyBar;
public bool isGround;
public float maxDashLimit;
public bool isDashing = false;
public float adder = 0.1f;
public Vector3 dir;
public AudioSource playerJump;
public AudioSource playerDoubleJump;
// Use this for initialization
void Start ()
{
charController = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update ()
{
Vector3 moveDir = new Vector3(0,verticalVelocity,0);
charController.Move (moveDir*Time.deltaTime);
isGround = charController.isGrounded;
if(charController.isGrounded)
{
//energyBar.SetEnergyForBoots(true);
verticalVelocity = -gravity*Time.deltaTime;
if(Input.GetKeyDown(KeyCode.Space))
{
Jump();
}
energyBar.SetEnergyForBoots(true);
}
else
{
if(Input.GetKeyDown(KeyCode.Space))
{
DoubleJump();
}
else
{
verticalVelocity -=gravity*Time.deltaTime;
}
}
if (Input.GetKey(KeyCode.W) && energyBar.GetEnergyForBoots())
{
if (Input.GetKeyDown(KeyCode.LeftShift))
{
isDashing = true;
dir = charController.transform.forward;
energyBar.SetEnergyForBoots(false);
}
}
else if(Input.GetKey(KeyCode.S) && energyBar.GetEnergyForBoots())
{
if (Input.GetKeyDown(KeyCode.LeftShift))
{
isDashing = true;
dir = -charController.transform.forward;
energyBar.SetEnergyForBoots(false);
}
}
else if(Input.GetKey(KeyCode.D) && energyBar.GetEnergyForBoots())
{
if (Input.GetKeyDown(KeyCode.LeftShift))
{
isDashing = true;
dir = charController.transform.right;
energyBar.SetEnergyForBoots(false);
}
}
else if(Input.GetKey(KeyCode.A) && energyBar.GetEnergyForBoots())
{
if (Input.GetKeyDown(KeyCode.LeftShift))
{
isDashing = true;
dir = -charController.transform.right;
energyBar.SetEnergyForBoots(false);
}
}
if(isDashing)
{
gravity = 0;
Dash (dir);
}
}
void Jump()
{
verticalVelocity = jumpForce;
playerJump.Play ();
}
void DoubleJump()
{
if(energyBar.GetEnergyForBoots())
{
verticalVelocity = jumpForce;
playerDoubleJump.Play ();
energyBar.SetEnergyForBoots(false);
}
}
public void Dash(Vector3 dashDir)
{
dashForce += adder;
charController.Move((dashDir * dashForce) * Time.deltaTime);
if (dashForce > maxDashLimit)
{
isDashing = false;
dashForce = 0;
gravity = 14;
}
}
}
I'm not sure what's happening, maybe it has to do something with the charactercontroller collider?
Comment