Гладкая точная камера Unity, движущаяся с инерцией - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь написать скрипт камеры, но он работает не так, как задумано.

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, я хочу переместить ее, как будто я двигаю землю "перетаскиванием" \

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Это из-за 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?

0 голосов
/ 18 февраля 2019

Вы должны попробовать использовать Vector3.Lerp(_lastPosition, deltaxz, someValue * Time.deltaTime)

Это то, что я использую, чтобы сделать движения более плавными, и это довольно хорошо, просто отрегулируйте someValue в зависимости от желаемой скорости

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...