Unity 6.3
0 онлайн 62 гостей 3 в системе
Вход

CharacterController.Move

Declaration

public CollisionFlags Move(Vector3 motion);

Описание

Обеспечивает движение GameObject с прикрепленным компонентом CharacterController.

Движение CharacterController.Move перемещает GameObject в заданном направлении. Заданное направление требует абсолютных значений дельты движения. Столкновение ограничивает Move. Возврат, CollisionFlags, указывает направление столкновения: нет, стороны, выше, и ниже. CharacterController.Move не использует гравитацию.

Пример ниже демонстрирует, как использовать CharacterController.Move. Update вызывает Move для перемещения игрока. Кроме того, Jump изменяет положение игрока в вертикальном направлении.

// 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;

public CharacterController controller; private Vector3 playerVelocity; private bool groundedPlayer;

[Header("Input Actions")] public InputActionReference moveAction; public InputActionReference jumpAction;

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) { // Slight downward velocity to keep grounded stable if (playerVelocity.y < -2f) playerVelocity.y = -2f; }

// 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 using WasPressedThisFrame() if (groundedPlayer && jumpAction.action.WasPressedThisFrame()) { playerVelocity.y = Mathf.Sqrt(jumpHeight * -2f * gravityValue); }

// Apply gravity playerVelocity.y += gravityValue * Time.deltaTime;

// Move Vector3 finalMove = move * playerSpeed + Vector3.up * playerVelocity.y; controller.Move(finalMove * Time.deltaTime); } }