Supplies the movement of a GameObject with an attached CharacterController component.
The CharacterController.Move motion moves the GameObject in the given direction. The given direction requires absolute movement delta values. A collision constrains the Move from taking place. The return, CollisionFlags, indicates the direction of a collision: None, Sides, Above, and Below. CharacterController.Move does not use gravity.
The example below demonstrates how to use CharacterController.Move. Update
causes a Move to re-position the player. In addition, Jump
changes the player position in a vertical direction.
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Example : MonoBehaviour { private CharacterController controller; private Vector3 playerVelocity; private bool groundedPlayer; private float playerSpeed = 2.0f; private float jumpHeight = 1.0f; private float gravityValue = -9.81f;
private void Start() { controller = gameObject.AddComponent<CharacterController>(); }
void Update() { groundedPlayer = controller.isGrounded; if (groundedPlayer && playerVelocity.y < 0) { playerVelocity.y = 0f; }
// Horizontal input Vector3 move = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); move = Vector3.ClampMagnitude(move, 1f); // Optional: prevents faster diagonal movement
if (move != Vector3.zero) { transform.forward = move; }
// Jump if (Input.GetButtonDown("Jump") && groundedPlayer) { playerVelocity.y = Mathf.Sqrt(jumpHeight * -2.0f * gravityValue); }
// Apply gravity playerVelocity.y += gravityValue * Time.deltaTime;
// Combine horizontal and vertical movement Vector3 finalMove = (move * playerSpeed) + (playerVelocity.y * Vector3.up); controller.Move(finalMove * Time.deltaTime); } }