Unity Touch Положение Разница всегда положительна - PullRequest
0 голосов
/ 11 октября 2019

Я использую следующий код для измерения смахиваний на сенсорных устройствах. Тем не менее, вычисления, которые я делаю для moveHorizontal и moveVertical, всегда положительны. Разница в осязании всегда положительна. Игрок перемещается только в верхнем правом углу, независимо от того, проводите ли вы по экрану или просто долго нажимаете на экран. Что я делаю неправильно?

if (Input.touchCount > 0)
{
    foreach (Touch touch in Input.touches)
    {
        if (touch.phase == TouchPhase.Began)
        {
            firstPos = new Vector2(touch.position.x / (float)Screen.width, touch.position.y / (float)Screen.width);
            lastPos = new Vector2(touch.position.x / (float)Screen.width, touch.position.y / (float)Screen.width);
        }
        else if (touch.phase == TouchPhase.Moved)
        {
            lastPos = new Vector2(touch.position.x / (float)Screen.width, touch.position.y / (float)Screen.width);
        }
        else if (touch.phase == TouchPhase.Ended)
        {
            lastPos = new Vector2(touch.position.x / (float)Screen.width, touch.position.y / (float)Screen.width);
        }
        moveHorizontal = lastPos.x - firstPos.x;
        moveVertical = lastPos.y - firstPos.y;
    }
}

Я использую следующий код для перемещения объекта игрока.

Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rigidbody.AddForce(movement * speed);

1 Ответ

1 голос
/ 11 октября 2019

Я думаю, что вы слишком усложняете ситуацию, пытаясь отработать вводимые дельты самостоятельно, когда вы можете просто использовать touch.deltaPosition.

https://docs.unity3d.com/ScriptReference/Touch-deltaPosition.html

Таким образом, вы бы сделали что-то вроде этого

Vector2 movementVector;

foreach (Touch touch in Input.touches)
{
    movementVector += touch.deltaPosition;
}

rigidbody.AddForce(speed * new Vector3(movementVector.x,0,movementVector.y));

Другие примечания: не нужно проверять количество касаний, foreach ничего не будет делать, еслинет никаких прикосновений. Кроме того, может быть, вы хотите установить скорость напрямую, а не применять силу, зависит от ощущения, которое вы хотите в игре.

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