我在stackoverflow社区的帮助下向我的 Player 添加了一个机制,从那时起,我遇到了一个奇怪的错误:
当我将播放器(通过鼠标输入)朝负z方向旋转时,播放器会减速(行走或奔跑会大大减速)。
在我添加通过W,A,S,D和鼠标控制播放器的弹奏机制之前,鼠标旋转播放器,W向前走,而A,S,D将播放器向左,向后或向左旋转对,他们朝这个方向走。
自从我添加了弹射机制后,我的Player就可以在沿z方向看时行走,奔跑和扫射。一旦转过身,整个运动就会减速。
void Update () {
// input
Vector2 input = new Vector2 (Input.GetAxisRaw ("Horizontal"), Input.GetAxisRaw ("Vertical"));
Vector2 inputDir = input.normalized;
bool running = Input.GetKey (KeyCode.LeftShift);
if (!Input.GetMouseButtonDown(0) || Input.GetKey(KeyCode.JoystickButton2)) {
Move (inputDir, running);
Time.timeScale = 1;
}
if (Input.GetKeyDown (KeyCode.Space) || Input.GetKeyDown (KeyCode.JoystickButton0)) {
Jump ();
}
// animator
float animationSpeedPercent = ((running) ? currentSpeed.magnitude / runSpeed : currentSpeed.magnitude / walkSpeed * .5f);
void Move(Vector2 inputDir, bool running) {
float targetRotation = cameraT.eulerAngles.y;
transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref turnSmoothVelocity, GetModifiedSmoothTime(turnSmoothTime));
Vector2 targetSpeed = new Vector2(
((running) ? runSpeed : walkSpeed) * inputDir.normalized.x,
((running) ? runSpeed : walkSpeed) * inputDir.normalized.y);
currentSpeed = Vector2.SmoothDamp(currentSpeed, targetSpeed,
ref speedSmoothVelocity,
GetModifiedSmoothTime(speedSmoothTime));
velocityY += Time.deltaTime * gravity;
Vector3 velocity = (transform.forward * currentSpeed.y) +
(transform.right * currentSpeed.x) +
Vector3.up * velocityY;
controller.Move(velocity * Time.deltaTime);
currentSpeed = new Vector2(controller.velocity.x, controller.velocity.z);
if (controller.isGrounded)
{
velocityY = 0;
}
}
我希望脚本可以通过鼠标输入来转动播放器,并通过键盘来移动播放器。当然,如果他面对另一个方向,我没想到他会放慢脚步。期待您的帮助。
-nailuj05