- Home /
Question by
Maksim12332112 · Feb 06, 2021 at 06:30 PM ·
sprintsprinting
hi guys i have script for movement and everything works fine but i want to add sprinting when W is holded for 5 seconds here is my script.
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class tebrawtf : MonoBehaviour { public CharacterController controller;
public float speed = 12f;
public float gravity = -19.62f;
public float jumpHeight = 3f;
public Transform groundCheck;
public float groundDistance = 0.4f;
public LayerMask groundMask;
Vector3 velocity;
bool isGrounded;
bool midAirJump;
// 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.GetButtonDown("Jump"))
{
if (isGrounded)
{
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity); //your jumping code
midAirJump = true;
}
else if (midAirJump)
{
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity); //your jumping code
midAirJump = false;
}
}
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
}
}
Comment
Best Answer
Answer by Hellium · Feb 06, 2021 at 06:39 PM
CODE NOT TESTED
public float walkSpeed = 12f;
public float runSpeed = 20f;
public float gravity = -19.62f;
public float jumpHeight = 3f;
public Transform groundCheck;
public float groundDistance = 0.4f;
public LayerMask groundMask;
float speed;
Vector3 velocity;
bool isGrounded;
bool midAirJump;
float runTimer;
// 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");
if(z > 0)
{
runTimer += Time.deltaTime;
if(runTimer > 4)
speed = runSpeed;
}
else
{
speed = walkSpeed;
runTimer = 0;
}
Vector3 move = transform.right * x * walkSpeed + transform.forward * z * speed;
controller.Move(move * Time.deltaTime);
if (Input.GetButtonDown("Jump"))
{
if (isGrounded)
{
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity); //your jumping code
midAirJump = true;
}
else if (midAirJump)
{
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity); //your jumping code
midAirJump = false;
}
}
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
}
i tested you code @Hellium and it works bt you it kinda slowed my speed when normal walking but i gave bigger number to speed and now its all good thanks and also thanks to fast responde
Your answer
![](https://koobas.hobune.stream/wayback/20220613024708im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
How to disable sprinting when slider reaches zero. 1 Answer
Sprinting animation 1 Answer
unity 2d platformer dash attack. 1 Answer
What's wrong with my sprinting logic? 1 Answer
what's wrong with this script? 2 Answers