Unity перемещает проигрыватель по оси X

Я пытаюсь создать движение игрока по оси x на основе положения пальца.

Что мне нужно, чтобы произошло: Не мультитач. Я хочу, чтобы игрок мог опустить палец и захватить эту позицию. Затем проверьте, провел ли игрок пальцем по экрану по оси x и переместил ли игрока влево или вправо в зависимости от того, где он перетащил палец от первого прикосновения.

Итак, если они касаются экрана и перетаскивают влево: двигайтесь влево по скорости, а если изменяется, перетаскивая вправо, двигайтесь вправо по скорости.

Любая помощь была бы потрясающей.

пожалуйста, покажите нам свои исследовательские усилия, что вы уже пробовали, и опубликуйте свой текущий соответствующий код

Jinjinov 24.07.2018 10:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
1 980
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

используя код @programmer, указанный в этом ответе: Определение направления жеста смахивания

Вы можете легко определить направление, в котором вы проводите / перетаскиваете. Заменить отладку

 void OnSwipeLeft()
{
    Debug.Log("Swipe Left");
}

void OnSwipeRight()
{
    Debug.Log("Swipe Right");
}

С функциями, которые перемещают вашего персонажа. Если вы используете RigidBody для перемещения вашего персонажа, вы можете использовать https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html. Если это обычный объект, вы можете переместить его, настроив transform.position.

Если вам нужна дополнительная информация о том, как перемещать твердые тела \ нормальные объекты, дайте мне знать, какой у вас тип игры, и более подробную информацию о том, как вы настраиваете игрока.

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

Самый простой способ - сохранить первую позицию касания, а затем сравнить X с этой позицией:

public class PlayerMover : MonoBehaviour
{
    /// Movement speed units per second
    [SerializeField]
    private float speed;

    /// X coordinate of the initial press
    // The '?' makes the float nullable
    private float? pressX;



    /// Called once every frame
    private void Update()
    {
        // If pressed with one finger
        if (Input.GetMouseButtonDown(0))
            pressX = Input.touches[0].position.x;
        else if (Input.GetMouseButtonUp(0))
            pressX = null;


        if (pressX != null)
        {
            float currentX = Input.touches[0].position.x;

            // The finger of initial press is now left of the press position
            if (currentX < pressX)
                Move(-speed);

            // The finger of initial press is now right of the press position
            else if (currentX > pressX)
                Move(speed);

            // else is not required as if you manage (somehow)
            // move you finger back to initial X coordinate
            // you should just be staying still
        }
    }


    `
    /// Moves the player
    private void Move(float velocity)
    {
        transform.position += Vector3.right * velocity * Time.deltaTime;
    }

}

ПРЕДУПРЕЖДЕНИЕ: это решение будет работать только для устройств с доступным сенсорным вводом (из-за использования Input.touches).

Не могли бы вы сказать мне, что за? после того, как float называется или ссылка, чтобы лучше понять? На устройстве все работает нормально. Если кто-то еще ищет, вы просто не можете запустить это в редакторе.

shane 26.07.2018 22:22

Я написал предупреждение внизу ответа, сказав, что это работает только на устройствах с сенсорным вводом. Что касается ссылки на '?', См. docs.microsoft.com/en-us/dotnet/csharp/programming-guide/… («Синтаксис T? Является сокращением для Nullable <T>, где T - тип значения. Эти две формы взаимозаменяемы.»)

tsvedas 27.07.2018 08:21

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