Сенсорное управление в Unity3D нуждается в исправлении

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TouchPhaseDisplay : MonoBehaviour
{
[Header("GameObjects")]
public GameObject Pause_Menu;
public GameObject Gameplay_UI;

[Header("Touch Input")]
public Text directionTextComp;
private Touch theTouch;
private Vector2 touchStartPosition, touchEndPosition;
private string directionText;
private int tapCount = 0;
private float doubleTapTimer;

[Header("Movement")]
private Vector3 horitontalMovement;
private Vector3 verticalMovement;
public float speed;
private Vector3 direction;
public Rigidbody rb;

private void Start()
{
    rb = GetComponent<Rigidbody>();
}
    void LateUpdate()
{
    if (Input.touchCount > 0)
    {
        theTouch = Input.GetTouch(0);

        if (theTouch.phase == TouchPhase.Began)
        {
            touchStartPosition = theTouch.position;
        }
        else if (theTouch.phase == TouchPhase.Moved || theTouch.phase == TouchPhase.Ended)
        {

            touchEndPosition = theTouch.position;
            float x = touchEndPosition.x - touchStartPosition.x;
            float y = touchEndPosition.y - touchStartPosition.y;
            
            if (Mathf.Abs(x) == 0 && Mathf.Abs(y) == 0)
            {
                directionText = "Tapped";
            }
            else if (Mathf.Abs(x) > Mathf.Abs(y))
            {
                directionText = x > 0 ? "Right" : "Left";
                horitontalMovement = x > 0 ? new Vector3(0, 0, -1) : new Vector3(0, 0, 1);
            }
            else
            {
                directionText = y > 0 ? "Up" : "Down";
                verticalMovement = y > 0 ? new Vector3(1, 0, 0) : new Vector3(-1, 0, 0);
            }

            direction = new Vector3(verticalMovement.x, 0, horitontalMovement.z);

            if (theTouch.phase == TouchPhase.Ended || theTouch.phase == TouchPhase.Ended)
            {
                directionText = "Touch Ended";
                direction = new Vector3(0, 0, 0);
            }
        }
    }
            rb.AddForce(direction * speed);
    directionTextComp.text = directionText;
    Debug.Log("tapCount");
    doubleTapDetector();
    
}

    private void doubleTapDetector()
{
    if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began)
    {
        tapCount++;
    }
    if (tapCount > 0)
    {
        doubleTapTimer += Time.deltaTime;
    }
    if (tapCount >= 2)
    {
        PauseMenu();
        doubleTapTimer = 0.0f;
        tapCount = 0;
    }
    if (doubleTapTimer > 0.2f)
    {
        doubleTapTimer = 0f;
        tapCount = 0;
        Debug.Log(doubleTapTimer);
    }
}
    private void PauseMenu()
{
    Time.timeScale = 0.00001f;
    Pause_Menu.SetActive(true);
    Gameplay_UI.SetActive(false);
}
}

Это код, который я использую для перемещения игрока в зависимости от того, в каком направлении игрок проводит пальцем, и он работает, но есть большая проблема. Если я проведу пальцем влево, игрок начнет двигаться влево, что нормально, за исключением того, что если я проведу пальцем вверх, я все еще постоянно двигаюсь влево, и единственный способ остановить движение влево - это провести пальцем вправо, но теперь я постоянно двигаюсь вправо . Я думаю, вы видите проблему, и если есть решение этой проблемы, мы будем очень признательны.

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете отдельные векторы для verticalMovement и horitontalMovement и никогда не сбрасываете их. Вероятно, вы захотите сохранить только один вектор направления.

Другие вопросы по теме