Unity 5: как узнать, находится ли палец на джойстике, даже если он находится на нуле по горизонтали и вертикали

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


person Jonathan    schedule 29.10.2016    source источник
comment
Я в замешательстве. Это физический контроллер или элементы пользовательского интерфейса, функционирующие как элементы управления? Если мы говорим об элементах пользовательского интерфейса, просто добавьте в класс джойстика некоторую общедоступную функцию, которая возвращает true при выборе джойстика.   -  person bpgeck    schedule 30.10.2016
comment
Да, мы говорим об элементе пользовательского интерфейса, а не о физическом контроллере. Проблема в том, что я не могу найти способ вернуть true, если на джойстике есть палец. Например, Input.GetAxis(HorizontalRotate) возвращает значение 0, даже если на джойстике нет пальца, поэтому я не могу его использовать. Input.GetButton(HorizontalRotate) возвращает false несмотря ни на что.   -  person Jonathan    schedule 30.10.2016


Ответы (1)


Надеюсь, это поможет кому-то в будущем:

Я обнаружил, что есть методы OnPointerUp и OnPointerDown, которые можно использовать для проверки того, нажат ли джойстик или нет. Самый простой способ использовать их — изменить несколько вещей в Standard Assets > Utility > Joystick.cs. Вот как эти методы выглядят после моих изменений:

public void OnPointerUp(PointerEventData data)
{
    transform.position = m_StartPos;
    UpdateVirtualAxes(m_StartPos);

    if (data.rawPointerPress.name == "MobileJoystick_right") {
        rightJoystickPressed = false;
    }
}

public void OnPointerDown(PointerEventData data) {
    if (data.pointerEnter.name == "MobileJoystick_right") {
        rightJoystickPressed = true;
    }
}

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

person Jonathan    schedule 30.10.2016