I’ve created a basic script for a 3rd person character controller and it works perfectly except for one issue with jumping. No matter what I set the jumpSpeed variable to, the character jumps only about .2 in the y axis.
Here’s the code:
using UnityEngine; using System.Collections; public class SpartanController : MonoBehaviour { public int horizontalSpeed = 1; public int verticalSpeed = 1; public int rotationSpeed = 20; public int jumpSpeed = 100; public float gravity = 14.0F; private Vector3 moveDirection = Vector3.forward; private CharacterController controller; void Update() { controller = gameObject.GetComponent(); if (controller.isGrounded) { // fully control character float horizontalDirection = Input.GetAxis("Horizontal") * horizontalSpeed; float forwardDirection = Input.GetAxis("Vertical") * verticalSpeed; moveDirection = new Vector3(horizontalDirection, 0, forwardDirection); // get jump event if (Input.GetButton("Jump")) { moveDirection.y = jumpSpeed; } } else { // less control over character, gravity applied float horizontalDirection = Input.GetAxis("Horizontal") * horizontalSpeed / 2; float forwardDirection = Input.GetAxis("Vertical") * verticalSpeed / 2; moveDirection = new Vector3(horizontalDirection, moveDirection.y, forwardDirection); moveDirection.y -= gravity * Time.deltaTime; } moveDirection *= Time.deltaTime; if (moveDirection.magnitude > 0.05) { transform.LookAt(transform.position + new Vector3(moveDirection.x, 0, moveDirection.z)); } controller.Move(moveDirection); } }