- Home /
How would I make my first person controller sprint, when I hold left shift?
I am new to codeing. So I was wondering if somebody could be as kind as to share their script with me.Or give me the link to a script. Preferabley Java script. Thanks in advance?
Answer by ElectricFountain · Jul 05, 2013 at 10:58 PM
well, here is my answer to movement with the ability to sprint. First you need to set up the shift button: Go to >Edit >Project Settings >Input. Once you are there, make the size under the axis text 16 or one more than it was. The default will be Jump, rename it to RightShift. Beside the "positive button" text, type " right shift". Then make a C# script called move. Then copy this script in that script. Hope this helps...
using UnityEngine;
using System.Collections;
public class move : MonoBehaviour {
//Author :Electric Fountain Studios
//Getting Player
public GameObject player;
//Declaring Variables
public float movementspeed = 7.5f;
public float mouseSensitivity = 5.0f;
float verticleRotation = 0;
public float mouseRange = 60.0f;
public float jumpSpeed = 7.5f;
public float verticleVelocity = 0;
float maintainSpeedAtZero = 0.0f;
float sprint;
//Calling Character Controller
CharacterController characterController;
void Start () {
//Locking Cursor
Screen.lockCursor = true;
characterController = GetComponent<CharacterController>();
}
void Update () {
//Rotation
float rotleftright = Input.GetAxis ("Mouse X")* mouseSensitivity;
transform.Rotate(0, rotleftright, 0);
verticleRotation -= Input.GetAxis("Mouse Y")* mouseSensitivity;
verticleRotation = Mathf.Clamp(verticleRotation, -mouseRange, mouseRange);
Camera.main.transform.localRotation = Quaternion.Euler(verticleRotation, 0, 0);
//Sprinting
if(Input.GetButton("RightShift") ) {
sprint = Mathf.Sqrt(10.0f);
}else{
sprint = sprint - sprint;
}
//Movement
float forwardSpeed = Input.GetAxis("Vertical")*movementspeed + sprint;
float sideSpeed = Input.GetAxis("Horizontal")*movementspeed;
verticleVelocity += Physics.gravity.y * Time.deltaTime;
if(characterController.isGrounded && Input.GetButtonDown("Jump") ) {
verticleVelocity = jumpSpeed;
}
Vector3 speed = new Vector3 ( sideSpeed, verticleVelocity , forwardSpeed );
speed = transform.rotation * speed;
characterController.Move( speed * Time.deltaTime );
}
}
I did exactly what it said and when i do it tells me "Can't add script behaviour $$anonymous$$ove. The scripts file name does not match the name of the class defined in the script!"
public class move : $$anonymous$$onoBehaviour {
Where 'move' is the class name in the script - If the actual script file itself has a different name (case sensitive I believe) it will throw this error
Answer by asafsitner · Apr 22, 2012 at 12:17 PM
Keep a temporary variable to act as your final speed, and a constant that is your normal speed, along with another variable to act as a multiplier. A simple example:
var NaturalSpeed = 10;
var tempSpeed : float;
var SpeedMultiplier = 1.2; // for 20% speed increase while sprinting
var moveDirection : Vector3; //this determines which direction we should be moving towards
function Update()
{
moveDirection = Vector3.zero; //this rests our move direction to nothing so we wouldn't move unless movement keys were pressed
tempSpeed = NaturalSpeed; //this rests our speed back to natural speed
//this is just a simple movement check for demonstrating sprint; use your own methods of course
moveDirection.x += Input.GetAxis("Horizontal");
moveDirection.z += Input.GetAxis("Vertical");
if(Input.GetKey(KeyCode.LeftShift)) //this checks to see if the player is holding left shift
{
tempSpeed *= SpeedMultiplier; //this increases our speed by the multiplier
}
transform.Translate(moveDirection.normalized * tempSpeed * Time.deltaTime); //this moves our player to the correct direction at the determined speed (sprinted or not), smoothed over time
}
No need to post a new answer, a comment is enough. :) You might also want to mark the question as answered to take it off the 'questions' list (this can be done by accepting the answer (clicking the V mark under the vote marks))
Hey asafsitner your scripts ignores any collision what stands in fps controller way,i mean when i add your script i can walk through any objects....PLEASE FIX THIS.
Please help,im going to pdate this comment every $$anonymous$$ute,cause i NEED HELP.
Your answer
![](https://koobas.hobune.stream/wayback/20220613070617im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
FPS controller, only for use on object 0 Answers
Help with fps script 2 Answers
Player moving without input 2 Answers
My character won't move in C#. 1 Answer