Единство игрока, движущегося по оси х с пальцем, не работает - PullRequest
0 голосов
/ 17 марта 2020

Эй, я разрабатываю игру android с единством в 3D, и главное, что вы - квадрат, по которому вы должны двигаться по оси X. Я хочу, чтобы игрок мог положить палец туда, куда он хочет, и провести пальцем влево или вправо (все еще касаясь дисплея) и расстояние между позициями, где он начинает касаться, и тем, где он сейчас находится, квадрат должен двигаться вправо или влево. Когда игрок не касается, он не должен двигаться по оси X. Я сделал это, но у моего кода есть проблема, когда я отпускаю палец и снова касаюсь, не двигаясь вправо или влево, квадрат очень быстро отклоняется в одну сторону. Конечно, когда палец не двигается, квадрат не должен двигаться.

Изображение для лучшего понимания

// My Code
public class PlayerMovement : MonoBehaviour
{
    void FixedUpdate()
    {
        // move the player constantly forward
        transform.position += Vector3.forward * Time.deltaTime * speed;

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

            // the current finger position
            touchedPosMoved = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, 10));

            switch (touch.phase)
            {
                case TouchPhase.Began:
                    // get finger position when touch start
                    touchedPosBegan = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y, 10));

                    startX = transform.position.x;
                    break;

                case TouchPhase.Moved:
                    // claculate the distance between start and curent position of the finger
                    differenz = Mathf.Abs(touchedPosBegan.x - touchedPosMoved.x);

                    if (touchedPosBegan.x > touchedPosMoved.x)
                    {
                        differenz = differenz * -1;
                    }
                    break;
            }


            // Move player at the X-axis
            Vector3 idk = new Vector3((startX + differenz) * 8, transform.position.y, transform.position.z);
            gameObjectStart = new Vector3(startX, transform.position.y, transform.position.z);
            transform.position = Vector3.Lerp(gameObjectStart, idk, Time.deltaTime * 2);
        }
    }
}

Кто-нибудь знает проблему или имеет другое решение для моего переместить игрока, как описано выше

1 Ответ

0 голосов
/ 18 марта 2020

Здесь я нахожу лучший код без этих проблем, надеюсь, это поможет другим программистам;)

   private void FixedUpdate()
{
    transform.position += Vector3.forward * Time.deltaTime * speed;

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

        if (touch.phase == TouchPhase.Moved)
        {
            transform.position = new Vector3(
                transform.position.x + touch.deltaPosition.x * multiplier,
            transform.position.y,
            transform.position.z + touch.deltaPosition.y * multiplier);
        }
    }
}
...