团结:朝特定方向看时玩家会放慢速度

时间:2019-01-20 11:59:07

标签: c# unity3d 3d

我在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

0 个答案:

没有答案