Unity3D-第三人称玩家在对角线方向上的运动比在垂直和水平方向上的运动慢吗?

时间:2019-05-09 00:13:47

标签: c# unity3d

我正在尝试创建一个角色控制器,该角色控制器的移动速度受玩家按左摇杆的距离影响。当我可以工作时,遇到的另一个问题是玩家在对角移动时速度降低。

我在网上找到的大多数信息都涉及到相反的问题,即对角线运动更快(运动矢量超过1)。解决的办法是钳制幅度,以免将操纵杆压入一个角而不会超过1。我试图钳制以查看是否可行,但是,我认为这不是解决我的问题的方法。

此处的代码允许玩家相对于摄像机移动,并且速度受输入矢量的影响。

Vector3 input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
Vector3 inputDir = input.normalized;
void Move(Vector3 inputDir, Vector3 input)
    {
        running = Input.GetKey(KeyCode.Joystick1Button1); // B button on xbox one controller

        // Rotation stuff
        if (inputDir != Vector3.zero) {
            float targetRotation = Mathf.Atan2(inputDir.x, inputDir.z) * Mathf.Rad2Deg + cameraTransform.eulerAngles.y;
            transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref turnSmoothVelocity, GetModifiedSmoothTime(speedSmoothTime));
        }

        // Pretty sure this is where things are breaking        
        float targetSpeed = ((running) ? runSpeed : walkSpeed) * inputDir.magnitude;
        currentSpeed = Mathf.SmoothDamp(currentSpeed, targetSpeed, ref speedSmoothVelocity, GetModifiedSmoothTime(speedSmoothTime));
        currentSpeed *= input.magnitude;
        vel = transform.forward * currentSpeed + Vector3.up * velocityY;
        currentSpeed = new Vector3(_controller.velocity.x, 0, _controller.velocity.z).magnitude;
    }
void ExecuteMovement()
    {            
        _controller.Move(vel * Time.deltaTime);
    }

0 个答案:

没有答案