版本:Unity 6 (6000.0)
语言英语
  • C#

CharacterController.Move

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交内容,但我们会阅读用户提出的每一项更改建议,并在适当时进行更新。

关闭

提交失败

由于某种原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

切换到手册

声明

public CollisionFlags Move(Vector3 motion);

描述

提供具有附加 CharacterController 组件的 GameObject 的移动。

CharacterController.Move 运动会将 GameObject 移动到给定方向。给定方向需要绝对移动增量值。碰撞会限制 Move 的发生。返回值 CollisionFlags 指示碰撞的方向:无、侧面、上方和下方。 CharacterController.Move 不使用重力。

下面的示例演示了如何使用 CharacterContoller.Move。 Update 会导致 Move 重新定位玩家。此外, Jump 会在垂直方向上更改玩家位置。

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

Vector3 move = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); controller.Move(move * Time.deltaTime * playerSpeed);

if (move != Vector3.zero) { gameObject.transform.forward = move; }

// Changes the height position of the player.. if (Input.GetButtonDown("Jump") && groundedPlayer) { playerVelocity.y += Mathf.Sqrt(jumpHeight * -3.0f * gravityValue); }

playerVelocity.y += gravityValue * Time.deltaTime; controller.Move(playerVelocity * Time.deltaTime); } }