- 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
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