A more complex Move member taking absolute movement deltas.
Attempt to move the controller by motion
. The motion is only constrained by collisions. It will slide along colliders. CollisionFlags is a summary of collisions that occurred during the Move. This method does not apply any gravity.
/// This script moves the character controller forward /// and sideways based on the arrow keys. /// It also jumps when pressing space. /// Make sure to attach a character controller to the same game object. /// It is recommended that you make only one call to Move or SimpleMove per frame. CharacterController characterController;
var speed : float = 6.0; var jumpSpeed : float = 8.0; var gravity : float = 20.0;
void Start(){ characterController = GetComponent<CharacterController>(); }
void Update(){ if (characterController.isGrounded) // We are grounded, so recalculate // move direction directly from axes moveDirection = Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); moveDirection *= speed;
if (Input.GetButton ("Jump")) { moveDirection.y = jumpSpeed; } }
// Apply gravity. Gravity is multiplied by deltaTime twice (once here, and once below // when the moveDirection is multiplied by deltaTime). This is because gravity should be applied // as an acceleration (ms^-2) moveDirection.y -= gravity * Time.deltaTime;
// Move the controller characterController.Move(moveDirection * Time.deltaTime); }
using UnityEngine; using System.Collections;
// The GameObject is made to bounce using the space key. // Also the GameOject can be moved forward/backward and left/right. // Add a Quad to the Scene so this GameObject can collider with a floor.
public class ExampleScript : MonoBehaviour { public float speed = 6.0f; public float jumpSpeed = 8.0f; public float gravity = 20.0f;
private Vector3 moveDirection = Vector3.zero; private CharacterController controller;
void Start() { controller = GetComponent<CharacterController>();
// let the gameObject fall down gameObject.transform.position = new Vector3(0, 5, 0); }
void Update() { if (controller.isGrounded) { // We are grounded, so recalculate // move direction directly from axes
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical")); moveDirection = transform.TransformDirection(moveDirection); moveDirection = moveDirection * speed;
if (Input.GetButton("Jump")) { moveDirection.y = jumpSpeed; } }
// Apply gravity moveDirection.y = moveDirection.y - (gravity * Time.deltaTime);
// Move the controller controller.Move(moveDirection * Time.deltaTime); } }