繁体   English   中英

如何在 Unity 中平滑鼠标 X 的值

[英]How Can I smooth out the Values of Mouse X in Unity

我正在尝试创建一个脚本,使凸轮在 Z 轴动态上倾斜,这样当您向右看时,相机会像被拉动一样向侧面倾斜,但不知何故,我的凸轮只是抖动,我知道为什么,但我不知道怎么做修复命中。 原因是鼠标 X 轴的值。 当我打印出来时,我可以看到它的第二个值是 0,而其他的值是真实值,所以我的相机从 0 捕捉到我想要的旋转。

最新版本 Function 中的第一部分仅用于凸轮的第一人称控制

    public float MausEmpfindlichkeit;
    float CamTilt;

    //transform
    public Transform PlayerBody;


    //floats
    float Xrot = 0f;


    //Scripte
    public RotaionSpeed PlayerSpeed;

    // Start is called before the first frame update
    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    // Update is called once per frame
    void LateUpdate()
    {
        TurnCamToSpeed();

        float MausX = Input.GetAxis("Mouse X") * Time.deltaTime * MausEmpfindlichkeit;
        float MausY = Input.GetAxis("Mouse Y") * Time.deltaTime * MausEmpfindlichkeit;

        Xrot -= MausY;

        transform.localRotation = Quaternion.Euler(Xrot, 0f, CamTilt);
        PlayerBody.Rotate(Vector3.up * MausX);

        print(Input.GetAxis("Mouse X"));

    }

    void TurnCamToSpeed()
    {
        float CamTiltValaue = Random.Range(0, Input.GetAxis("Mouse X"));
        CamTilt = -CamTiltValaue * 3;
        
    }

我的问题是,如何防止这种情况发生并获得鼠标 X 轴的平滑值

这是当前的行为,但由于 gif 的 fps 速率较低,因此很难

一般来说,与GetAxis相反, GetAxisRaw已经被平滑了一点。

但不是硬设置

CamTilt = -CamTiltValaue * 3;

您可以使用Mathf.Lerp添加更多平滑,例如

CamTilt = Mathf.Lerp(CamTilt, -CamTiltValaue * 3, someFactor * Time.deltaTime);

其中someFactor乘以Time.deltaTime应该介于01之间,因此您必须使用它。

不过请注意,这可能会导致某些东西几乎没有移动,因为您每帧都选择了一个新值,这可能最终或多或少地固定在中间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM