Unity Mobile контролирует позиции - PullRequest
0 голосов
/ 17 ноября 2018

В моем коде мой объект, к которому прикреплен скрипт, всегда перемещается вправо, подразумевая второе, если всегда встречается, независимо от того, где на экране я касаюсь. Игровой объект начинается в середине экрана. Он должен двигаться влево, если я коснусь слева от объекта. Я что-то упустил?

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


        if (touch.position.x < transform.position.x)   {
            transform.Translate (-0.05f * speed, 0, 0); 
        } else if (touch.position.x > transform.position.x) {
            transform.Translate (0.05f * speed, 0, 0);
        }


    }

1 Ответ

0 голосов
/ 17 ноября 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));

    Debug.DrawLine(Camera.main.transform.position, point, Color.green, 1);


    var delta = transform.position.x - point.x;

    if(Mathf.Abs(delta) < threshold)
    {
        return;
    }


    if (point.x < transform.position.x)
    {
        transform.Translate(-0.05f * speed, 0, 0);
    }
    else if (point.x >= transform.position.x)
    {
        transform.Translate(0.05f * speed, 0, 0);
    }
}

Input.GetTouch() даст вам vector2, Это x и y - позиции вашего касания в 2Dэкран вашего телефона / планшета.Поэтому вам следует преобразовать позицию касания экрана в мировую позицию (x, y и z в трехмерном пространстве), а затем сравнить эту мировую позицию с позицией вашего объекта.

Причина, по которой выНеобходимо использовать Основная камера . Это означает, что ваше касание должно быть преобразовано в трехмерное пространство, а для преобразования 2D-точки в 3D-точку требуется параметр Z.Вы получите этот параметр, найдя разницу положений основной камеры и объекта.Вы можете получить основную камеру, используя Camera.main.

Я также добавил Debug.DrawLine(), чтобы показать вам точную точку.Используйте UnityRemote для проверки и просмотра строки в Редакторе .

Существует свойство threshold, предотвращающее щелчок игрового объекта.

Примечание: Имейте в виду, что это только пример, и он не будет работать для других ракурсов камеры.

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