Правильно ли работает мой алгоритм касания? - PullRequest
0 голосов
/ 03 июля 2018

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

https://www.youtube.com/watch?v=X5tC7y1_ARA

1) Двигаться только по осям X (здесь не проблема)

2) Когда я нажимаю на экран, объект не должен телепортироваться в положение пальца.

3) Объект должен перемещаться из начальной позиции объекта в текущую позицию объекта в реальном времени, без телепортации. Я рассчитываю текущую позицию объекта следующим образом:

текущая позиция объекта = текущая позиция объекта + текущая позиция пальца - начальная позиция пальца

Вот что я получил до сих пор

        if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            if (touch.phase == TouchPhase.Began)
            {
                Vector3 startPos = touch.position;  //Initial Position
            }
            if (touch.phase == TouchPhase.Moved)
            {
                Vector3 movementDistance = new Vector3(touch.position.x - startPos.x, 0, 0);
                Vector3 direction = Camera.main.ScreenToWorldPoint(movementDistance);
                Vector3 currentPos = Camera.main.ScreenToWorldPoint(transform.position);
                transform.position = new Vector3(Mathf.Clamp(currentPos.x + direction.x, -121, 121), transform.position.y, transform.position.z);
            }
        }

По какой-то причине это не работает должным образом. Объект телепортируется в случайные позиции, и он не перемещает объект, как я надеялся.

Можете ли вы помочь мне обнаружить мою проблему? Если нет, знаете ли вы какие-либо другие методы?

1 Ответ

0 голосов
/ 04 июля 2018

читать о «Переменная область» - https://msdn.microsoft.com/en-us/library/ms973875.aspx

попробуйте это:

Vector3 startPos;
float movementSpeed = 0.1f; // adjust this to your liking

void Update()
{
    if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);
        if (touch.phase == TouchPhase.Began)
        {
            startPos = touch.position;  //Initial Position
        }
        if (touch.phase == TouchPhase.Moved)
        {
            Vector3 movementDistance = new Vector3(touch.position.x - startPos.x, 0, 0);
            Vector3 direction = Camera.main.ScreenToWorldPoint(movementDistance);
            transform.position = new Vector3(Mathf.Clamp(transform.position.x + movementSpeed * direction.x, -121, 121), transform.position.y, transform.position.z);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...