- Home /
How do i maintain the same speed in the air?
Hello, i'm making a movement script. I used Brackeys his first person movement script.
Here is the link: https://www.youtube.com/watch?v=_QajrabyTJc&list=RDCMUCYbK_tjZ2OrIZFBvU6CCMiA∈dex=2&ab_channel=Brackeys
But every time i jump, the speed of the character is the same as the normal walk speed. But i want it to have the same speed it has when i run for example. Could someone help with it?
Here is my code:
{
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Movement : MonoBehaviour { public CharacterController controller;
public float speed = 5f;
public float runSpeed = 10f;
public float gravity = -8.81f;
public float jumpHeight = 3f;
public Transform groundCheck;
public float groundDistance = 0.4f;
public LayerMask groundMask;
Vector3 velocity;
bool isGrounded;
// Update is called once per frame
void Update()
{
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
if (isGrounded && velocity.y < 0)
{
velocity.y = -2f;
}
float x = Input.GetAxis("Horizontal");
float z = Input.GetAxis("Vertical");
Vector3 move = transform.right * x + transform.forward * z;
controller.Move(move * speed * Time.deltaTime);
if (Input.GetKey(KeyCode.LeftShift) && isGrounded)
{
controller.Move(move * runSpeed * Time.deltaTime);
}
if (Input.GetButtonDown("Jump") && isGrounded)
{
velocity.y += Mathf.Sqrt(jumpHeight * -2f * gravity);
}
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
}
}
Answer by Llama_w_2Ls · Jun 03, 2021 at 01:01 PM
You can only run if Input.GetKey(KeyCode.LeftShift) && isGrounded
. Therefore, if you're not grounded, you will only be able to walk. Either, remove the isGrounded condition, or, use another bool that checks once you've jumped, whether you jumped holding shift or not, then allowing you to move with runspeed in air, if you jumped with shift.