Smooth/realistic crouching script in C#???
Hello everyone! This is my very first post so please understand if I did anything wrong (sorry too about the long post. I am trying to make a realistic 3D first person parkour game (sort of like Mirrors Edge) using Unity 5. I have two scripts so far. One for the mouse look and another for most of the basic movements including walking, running, jumping, crouching, and prone (later on I will make another script for advanced movements like wall running, wall jumping, vaulting, and ledge grabbing). Anyway, I have searched all over google and the forums here but have not been able to find a suitable script. I need a help implementing a short (if possible) crouching script into my main movement script (written in C# and compatible with Unity 5) which I have pasted below. I need the crouch script to be able to shrink the player to walk under things and also to have a smooth/realisticish crouch animation (no teleporting camera to feet thing). Also, I won't need any character animations just yet so it is fine if it is not very pretty in third person. Thank you all for your time.
using UnityEngine;
using System.Collections;
public class Movement : MonoBehaviour {
float maxRunSpeed = 5.0f; // If changing speed, also change on line 36
float maxStrafeSpeed = 5.0f; // If changing speed, also change on line 37
float maxSprintSpeed = 10.0f;
float maxSprintStrafeSpeed = 5.0f;
public float jumpSpeed = 5.0f;
float verticalVelocity = 0;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
CharacterController cc = GetComponent<CharacterController> ();
float forwardSpeed = Input.GetAxis ("Vertical") * maxRunSpeed;
float sideSpeed = Input.GetAxis ("Horizontal") * maxStrafeSpeed;
verticalVelocity += Physics.gravity.y * Time.deltaTime;
if( cc.isGrounded && Input.GetKey(KeyCode.Space) ) {
verticalVelocity = jumpSpeed;
}
Vector3 speed = new Vector3 (sideSpeed, verticalVelocity, forwardSpeed);
speed = transform.rotation * speed;
cc.Move( speed * Time.deltaTime);
if (Input.GetKeyDown (KeyCode.LeftShift)) {
maxRunSpeed = maxSprintSpeed;
maxStrafeSpeed = maxSprintStrafeSpeed;
if (Input.GetKey (KeyCode.S))
maxRunSpeed = 5.0f;
else
maxRunSpeed = maxSprintSpeed;
}
if (Input.GetKeyUp (KeyCode.LeftShift)) {
maxRunSpeed = 5.0f;
maxStrafeSpeed = 5.0f;
}
}
}
P.S.: My C# coding experience is about medium (definitely not a pro yet) <<< (no idea if that matters)