Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Close Submission failedFor some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Close Your name Your email Suggestion* Switch to Manual DescriptionSupplies 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.
// This first example shows how to move using Input System Package (New)using UnityEngine; using UnityEngine.InputSystem;
public class Example : MonoBehaviour { private float playerSpeed = 5.0f; private float jumpHeight = 1.5f; private float gravityValue = -9.81f;
private CharacterController controller; private Vector3 playerVelocity; private bool groundedPlayer;
[Header("Input Actions")] public InputActionReference moveAction; // expects Vector2 public InputActionReference jumpAction; // expects Button
private void Awake() { controller = gameObject.AddComponent<CharacterController>(); }
private void OnEnable() { moveAction.action.Enable(); jumpAction.action.Enable(); }
private void OnDisable() { moveAction.action.Disable(); jumpAction.action.Disable(); }
void Update() { groundedPlayer = controller.isGrounded; if (groundedPlayer && playerVelocity.y < 0) { playerVelocity.y = 0f; }
// Read input Vector2 input = moveAction.action.ReadValue<Vector2>(); Vector3 move = new Vector3(input.x, 0, input.y); move = Vector3.ClampMagnitude(move, 1f);
if (move != Vector3.zero) { transform.forward = move; }
// Jump if (jumpAction.action.triggered && 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); } }
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4