Character controller does not jump
Hi, my character controller does not jump even though it gets the command. If I do test and print (something) with "if (Input.GetButton (" Jump ") && controller.isGrounded), it works. So it has to be in the move direction.
Here my code: using UnityEngine; using System.Collections;
public class PlayerController : MonoBehaviour {
private Vector3 moveDirection = Vector3.zero;
private CharacterController controller;
public Transform playerCam, character, centerPoint;
private float mouseX, mouseY;
public float mouseSensitivity = 10f;
public float mouseYPosition = 1f;
private float moveFB, moveLR;
public float Speed = 2f;
public float Jump = 8.0f;
public float Gravity = 20.0f;
public bool isGrounded = false;
private float zoom;
public float zoomSpeed = 2;
public float zoomMin = -2f;
public float zoomMax = -10f;
public float rotationSpeed = 5f;
void Start()
{
zoom = -3;
controller = GetComponent<CharacterController>();
}
void Update()
{
zoom += Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
if (zoom > zoomMin)
zoom = zoomMin;
if (zoom < zoomMax)
zoom = zoomMax;
playerCam.transform.localPosition = new Vector3(0, 0, zoom);
if (Input.GetMouseButton(1))
{
mouseX += Input.GetAxis("Mouse X");
mouseY -= Input.GetAxis("Mouse Y");
}
mouseY = Mathf.Clamp(mouseY, -60f, 60f);
playerCam.LookAt(centerPoint);
centerPoint.localRotation = Quaternion.Euler(mouseY, mouseX, 0);
moveFB = Input.GetAxis("Vertical") * Speed;
moveLR = Input.GetAxis("Horizontal") * Speed;
Vector3 movement = new Vector3(moveLR, 0, moveFB);
movement = character.rotation * movement;
character.GetComponent<CharacterController>().Move(movement * Time.deltaTime);
centerPoint.position = new Vector3(character.position.x, character.position.y + mouseYPosition, character.position.z);
if (Input.GetAxis("Vertical") > 0 | Input.GetAxis("Vertical") < 0)
{
Quaternion turnAngle = Quaternion.Euler(0, centerPoint.eulerAngles.y, 0);
character.rotation = Quaternion.Slerp(character.rotation, turnAngle, Time.deltaTime * rotationSpeed);
}
if (Input.GetButton("Jump") && controller.isGrounded)
{
moveDirection.y = Jump;
isGrounded = false;
}
moveDirection.y = moveDirection.y - Gravity * Time.deltaTime;
// Move the controller
controller.Move(moveDirection * Time.deltaTime);
}
},Hi, my character controller does not jump even though it gets the command. If I do test and print (something) with "if (Input.GetButton (" Jump ") && controller.isGrounded), it works. So it has to be in the move direction.
Here is my code:
using UnityEngine; using System.Collections;
public class PlayerController : MonoBehaviour {
private Vector3 moveDirection = Vector3.zero;
private CharacterController controller;
public Transform playerCam, character, centerPoint;
private float mouseX, mouseY;
public float mouseSensitivity = 10f;
public float mouseYPosition = 1f;
private float moveFB, moveLR;
public float Speed = 2f;
public float Jump = 8.0f;
public float Gravity = 20.0f;
public bool isGrounded = false;
private float zoom;
public float zoomSpeed = 2;
public float zoomMin = -2f;
public float zoomMax = -10f;
public float rotationSpeed = 5f;
void Start()
{
zoom = -3;
controller = GetComponent<CharacterController>();
}
void Update()
{
zoom += Input.GetAxis("Mouse ScrollWheel") * zoomSpeed;
if (zoom > zoomMin)
zoom = zoomMin;
if (zoom < zoomMax)
zoom = zoomMax;
playerCam.transform.localPosition = new Vector3(0, 0, zoom);
if (Input.GetMouseButton(1))
{
mouseX += Input.GetAxis("Mouse X");
mouseY -= Input.GetAxis("Mouse Y");
}
mouseY = Mathf.Clamp(mouseY, -60f, 60f);
playerCam.LookAt(centerPoint);
centerPoint.localRotation = Quaternion.Euler(mouseY, mouseX, 0);
moveFB = Input.GetAxis("Vertical") * Speed;
moveLR = Input.GetAxis("Horizontal") * Speed;
Vector3 movement = new Vector3(moveLR, 0, moveFB);
movement = character.rotation * movement;
character.GetComponent<CharacterController>().Move(movement * Time.deltaTime);
centerPoint.position = new Vector3(character.position.x, character.position.y + mouseYPosition, character.position.z);
if (Input.GetAxis("Vertical") > 0 | Input.GetAxis("Vertical") < 0)
{
Quaternion turnAngle = Quaternion.Euler(0, centerPoint.eulerAngles.y, 0);
character.rotation = Quaternion.Slerp(character.rotation, turnAngle, Time.deltaTime * rotationSpeed);
}
if (Input.GetButton("Jump") && controller.isGrounded)
{
moveDirection.y = Jump;
isGrounded = false;
}
moveDirection.y = moveDirection.y - Gravity * Time.deltaTime;
// Move the controller
controller.Move(moveDirection * Time.deltaTime);
}
}
Answer by amirmohammadk · Jan 03, 2019 at 10:05 AM
hello. try this:
public Rigidbody2D rb2;
float theJumpForce = 100;//or every number you want
void Update (){
if (Input.GetKeyDown(KeyCode.J)){
rb2.AddForce(new Vector2(0f, theJumpForce));
}
}
Your answer
Follow this Question
Related Questions
Problem with character controller movement and gravity 0 Answers
Character Controller move overrides transform.position 0 Answers
char speed need help 0 Answers
Player keeps flying up 0 Answers