- Home /
How can I add air control to my 3d platformer's Character Controller?
Hi everyone,
I am trying to add air control to my 3rd person character in my 3D platformer game. My script is based off the CharacterController.Move reference here: https://docs.unity3d.com/ScriptReference/CharacterController.Move.html (I did make a modification to allow for rotation).
By 'air control,' I mean the ability to change your position while jumping, so that the player can make slight mid-air movements to line up with a platform.
I've looked through the documentation, but I'm not finding a straightforward answer. This feels like it should be simple, but I suppose not. (Perhaps it's simple for someone who has more experience than me!) I've tried what would seem like obvious fixes, like taking the moveDirection elements out of the "isgrounded" part of the script, but that doesn't work and messes up the jump.
Thanks in advance--I've spent hours on this and I really do appreciate your help. I'm very new to Unity scripting.
My script so far:
using UnityEngine; using System.Collections;
public class ControllerScript : MonoBehaviour {
//source: http://docs.unity3d.com/ScriptReference/CharacterController.Move.html
public float speed = 6.0F;
public float jumpSpeed = 8.0F;
public float gravity = 20.0F;
public float rotateSpeed = 3.0F;
private Vector3 moveDirection = Vector3.zero;
void Update()
{
CharacterController controller = GetComponent<CharacterController>();
transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed * Time.deltaTime, 0);
if (controller.isGrounded)
{
moveDirection = new Vector3(0, 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton("Jump"))
moveDirection.y = jumpSpeed;
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}
}