0

我正在尝试编写一个相机脚本,但它没有按预期工作。

void LateUpdate(){
        if (Input.GetMouseButtonDown(0)
        {
            _lastPosition = Input.mousePosition;
        }

        if (Input.GetMouseButton(0))
        {
            var delta = _lastPosition - Input.mousePosition;
            var deltaxz = new Vector3(delta.x, 0f, delta.y);
            transform.Translate(deltaxz * Time.deltaTime, Space.World);
            _lastPosition = Input.mousePosition;
        }
}

我写了这段代码来移动相机,但是鼠标奇怪地移动了相机。如果我将鼠标移动得太快,它就会移动得很快。如果慢,则相机的移动速度比鼠标慢。

我认为这ScreenToWorldPoint会有所帮助,但相机是 RTS 风格,我想像移动地面一样移动它“拖放”\

4

2 回答 2

0

你应该尝试使用 Vector3.Lerp(_lastPosition, deltaxz, someValue * Time.deltaTime)

这是我用来使动作更流畅的东西,它非常好,只需根据你想要的速度调整 someValue

于 2019-02-18T08:24:44.527 回答
0

那是因为 deltaTime (它总是大约 0.01f-0.02f = 大量迭代的精度差)您可以使用 Lerp 解决方法来像 Jichael 一样平滑移动,但只需进行微小的更改(它直接与 transform.positon 一起使用),完整代码:

//new:
public float Sensitivity;

private Vector3 _lastPosition;

private void LateUpdate()
{
    if (Input.GetMouseButtonDown(0))
    {
        _lastPosition = Input.mousePosition;
    }

    if (Input.GetMouseButton(0))
    {
        var delta = (_lastPosition - Input.mousePosition);
        var deltaxz = new Vector3(delta.x, 0f, delta.y);
        //new:
        transform.position = Vector3.Lerp(transform.position, transform.position + deltaxz, Sensitivity * Time.deltaTime);
        _lastPosition = Input.mousePosition;
    }
}

PS你为什么要使用LateUpdate?

于 2019-02-18T11:40:53.370 回答