C
C#14mo ago
oviar

I am trying to add sprinting ability to my attempt of a game I got movement done but cant get sprint

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
public CharacterController controller;

public float speed = 6f;
public float gravity = -20;
public float jumpHeight = 3f;

public Transform groundCheck;
public float groundDistance = 0.4f;
public LayerMask groundMask;

public bool isMoving = false;
public float movementSpeed = 200;

Vector3 velocity;
bool isGrounded;

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 (Input.GetKeyDown("w"))
{
isMoving = true;
}

if (Input.GetKeyUp("w"))
{
isMoving = false;
}



Vector3 move = transform.right * x + transform.forward * z;

controller.Move(move * speed * Time.deltaTime);

if (Input.GetButtonDown("Jump") && isGrounded)
{
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
}

if (Input.GetKey(KeyCode.LeftShift) & isMoving == true)

{
transform.position += transform.forward * Time.deltaTime * movementSpeed;
}

velocity.y += gravity * Time.deltaTime;

controller.Move(velocity * Time.deltaTime);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
public CharacterController controller;

public float speed = 6f;
public float gravity = -20;
public float jumpHeight = 3f;

public Transform groundCheck;
public float groundDistance = 0.4f;
public LayerMask groundMask;

public bool isMoving = false;
public float movementSpeed = 200;

Vector3 velocity;
bool isGrounded;

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 (Input.GetKeyDown("w"))
{
isMoving = true;
}

if (Input.GetKeyUp("w"))
{
isMoving = false;
}



Vector3 move = transform.right * x + transform.forward * z;

controller.Move(move * speed * Time.deltaTime);

if (Input.GetButtonDown("Jump") && isGrounded)
{
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
}

if (Input.GetKey(KeyCode.LeftShift) & isMoving == true)

{
transform.position += transform.forward * Time.deltaTime * movementSpeed;
}

velocity.y += gravity * Time.deltaTime;

controller.Move(velocity * Time.deltaTime);
}
}
3 Replies
Anchy
Anchy14mo ago
what have you tried? what are you expecting to happen? what is actually happening? I can see a few issues here, including but not limited to: - Use of the bitwise & operator where you want to use the logical & operator (&&). - Updating the physics of your controller/rigidbody directly in the update method, all physics should be handled in FixedUpdate. - You should probably use some sort of multiplier which is applied to your speed when you are applying movement to your character. This can be toggle or controlled by adding an isSprinting flag like you did for isMoving I believe there is a better input system as well but I don't use Unity and/or know how to use it.
Buddy
Buddy14mo ago
I believe there is a better input system as well but I don't use Unity and/or know how to use it.
There is, just not that beginner-friendly. But it's significantly better.
Accord
Accord14mo ago
Was this issue resolved? If so, run /close - otherwise I will mark this as stale and this post will be archived until there is new activity.