единство гладкого 2D горизонтального преобразования - PullRequest
0 голосов
/ 20 ноября 2018

В настоящее время у меня есть скрипт для мобильного телефона, в котором просто отображается шарик на экране, и когда вы касаетесь шара слева, он перемещается влево, а когда вы касаетесь его вправо, он перемещается вправо.Однако, когда он движется, он не будет плавным, если я не опущу поплавок, насколько он движется (что приводит к его слишком медленной скорости).Как я могу поддерживать высокую скорость перевода, пока движение плавное?

if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);

        var point = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y,
            transform.position.z - Camera.main.transform.position.z));

        float dx = point.x - transform.position.x;
        if (point.x < transform.position.x)
        {
            //transform.Translate(-15f * Time.deltaTime, 0, 0);

            transform.Translate (dx * (1 - Mathf.Pow (0.5f, Time.deltaTime / halfWayTime)), 0, 0);


        }
        else if (point.x >= transform.position.x + 0.5f)
        {
            //transform.Translate(15f * Time.deltaTime, 0, 0);
            transform.Translate (dx * (1 - Mathf.Pow (0.5f, Time.deltaTime / halfWayTime)), 0, 0);
        }
    }

1 Ответ

0 голосов
/ 21 ноября 2018
float targetX;
const float halfWayTime = 0.1f;

void Update () {
    float dx = targetX - transform.position.x;
    transform.Translate (dx * (1 - Mathf.Pow (0.5f, Time.deltaTime / halfWayTime), 0, 0);
}

Это создает шаблон движения, который сначала быстрый, но в конце замедляется, и targetX можно редактировать в любое время.halfWayTime - это время, за которое объект завершит половину своего пути к цели, если он равен 0,1, то за 0,1 с он переместится на 50% от исходного расстояния, на 0,2 с - 75%, на 0,3 с - 87,5%.и т. д.

Кстати, вы можете изменить этот код для работы со всеми координатами:

void Update () {
    transform.position = Vector3.Lerp (
        target,
        transform.position,
        Mathf.Pow (0.5f, Time.deltaTime / halfWayTime)
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...