FPS movement with momentum
I'm trying to build a fps character with roller skates so I'm trying to apply momentum to his movement. So far, whenever I test the following code, He is able to look around but has no movement. this is the current code:
public float moveRate = 0.0f;
public float minSpeed = 10.0f;
public float maxSpeed = 20.0f;
public float currentSpeed = 0.0f;
public float mouseSens = 5.0f;
float verRotate = 0;
public float upDownRange = 60.0f;
public CharacterController cc;
// Use this for initialization
void Start () {
Screen.lockCursor = true;
cc = GetComponent<CharacterController>();
}
// Update is called once per frame
void FixedUpdate () {
// Rotation
float rotLeftRight = Input.GetAxis("Mouse X") * mouseSens;
transform.Rotate(0, rotLeftRight, 0);
verRotate -= Input.GetAxis("Mouse Y") * mouseSens;
verRotate = Mathf.Clamp(verRotate, -upDownRange, upDownRange);
Camera.main.transform.localRotation = Quaternion.Euler(verRotate, 0 , 0);
// Movement
if (Input.GetButtonDown("Vertical"))
{
currentSpeed = Mathf.Clamp01(currentSpeed + moveRate * Time.fixedDeltaTime);
Debug.Log("Moving!");
}
else
{
currentSpeed = Mathf.Clamp01(currentSpeed - moveRate * Time.fixedDeltaTime);
}
Vector3 verVelocity = new Vector3(cc.velocity.x, -Mathf.Lerp(minSpeed, maxSpeed, currentSpeed), cc.velocity.z);
cc.Move(verVelocity);
}
Thank you for your help
Answer by ElijahShadbolt · Nov 01, 2016 at 02:11 AM
Just modified the script to look like the example in the Script Reference for CharacterController.Move
FPSMovement.cs
using UnityEngine;
public class FPSMovement : MonoBehaviour
{
public float speed = 6.0F;
public float jumpSpeed = 8.0F;
public float gravity = 20.0F;
private Vector3 moveDirection = Vector3.zero;
public float mouseSens = 5.0f;
public float upDownRange = 60.0f;
private float verRotate = 0;
private CharacterController controller;
void Awake()
{
Cursor.lockState = CursorLockMode.Locked;
controller = GetComponent<CharacterController>();
}
void Update()
{
// Rotation
float rotLeftRight = Input.GetAxis("Mouse X") * mouseSens;
transform.Rotate(0, rotLeftRight, 0);
verRotate -= Input.GetAxis("Mouse Y") * mouseSens;
verRotate = Mathf.Clamp(verRotate, -upDownRange, upDownRange);
Camera.main.transform.localRotation = Quaternion.Euler(verRotate, 0, 0);
}
void FixedUpdate()
{
if (controller.isGrounded)
{
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton("Jump"))
moveDirection.y = jumpSpeed;
}
moveDirection.y -= gravity * Time.fixedDeltaTime;
controller.Move(moveDirection * Time.fixedDeltaTime);
}
}
Your answer
Follow this Question
Related Questions
how to stop my gun from moving further away from the camera when I look up and down? 0 Answers
Restrict Movement Changing Mid-air With CharacterController 0 Answers
Colliders "offset" and going down too. 0 Answers
¿Cómo modifico Max forward speed en Unity 5.2.3? | How do I change Max forward speed in Unity 5.2.3? 1 Answer
Player loses momentum when landing 0 Answers