我在移动角色时遇到了问题。
以下代码有效。
if (controller.isGrounded)
{
// X/Z Movement
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
// Y Movement.
if (Input.GetButtonDown("Jump"))
moveDirection.y = jumpForce;
}
// Apply gravity.
moveDirection.y -= grav * Time.deltaTime;
// Move the player.
print(moveDirection);
controller.Move(moveDirection * Time.deltaTime);
但是,如果我在if语句之前移动X / Z Movement和Y Movement注释之间的所有内容,则玩家只会减少一小部分而不是增加它们在空中的时间越长。任何人都知道发生了什么?
答案 0 :(得分:0)
糟糕。因为我重置了每个循环更新的moveDirection.y而不是堆叠重力,它重置为0然后应用 - = grav * Time.deltatime
答案 1 :(得分:0)
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
如果播放器接地,则没有理由在Y轴上移动它,因此它的值为0,但如果将其移到Update之外,则会不断重置每个帧。
现在这一行:moveDirection.y -= grav * Time.deltaTime;
从Vector3中减去Y上的0而不是来自moveDirection.y = jumpForce;
希望这有帮助。