【发布时间】:2021-05-25 19:19:55
【问题描述】:
我正在尝试制作一款 FPS 游戏,但是当我按下 w 一会儿然后松开它时,它会滑得比想要的更远。我对 Unity 很陌生,并认为它与更新有关。 代码:
public float moveSpeed = 5f;
public float jumpForce = 5f;
public CharacterController controller;
private Vector3 moveDirection;
public float gravityScale;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
float yStore = moveDirection.y;
moveDirection = (transform.forward * Input.GetAxis("Vertical")) + (transform.right * Input.GetAxis("Horizontal"));
moveDirection = moveDirection.normalized * moveSpeed;
moveDirection.y = yStore;
if (controller.isGrounded)
{
moveDirection.y = 0f;
if (Input.GetButtonDown("Jump"))
{
moveDirection.y = jumpForce;
}
}
moveDirection.y = moveDirection.y + (Physics.gravity.y * gravityScale);
controller.Move(moveDirection * Time.deltaTime);
}
【问题讨论】:
-
一般来说,一个问题可能出在
moveDirection.normalized.. 这可以确保即使轴是例如0.0001, 0.0001它仍将被归一化为幅度为1的向量 ...一般而言,此用例很少使用ClampMagnitude -
好吧,然后它使用刚体 .. 不知道
CharacterController在引擎盖下是如何工作的,但也许它不会立即停止刚体