Как определить, что кнопка пользовательского интерфейса (UI) зажата в Unity?

Как проверить, удерживается ли кнопка интерфейса Unity? Как привязать код к кнопке, чтобы она выполняла определенные действия при удерживании? 

public void Rotate()
{
    if (build_prefab != null)
    {
        build_prefab.transform.Rotate(0, 1, 0);
    }
}

public void NoRotate()
{
    if (build_prefab != null)
    {
        build_prefab.transform.Rotate(0, 0, 0);
    }
}

Как настроить кнопку, чтобы она вызывала метод Rotate() при удержании и метод NoRotate() при отпускании?
Изображение к вопросу
  • 24 сентября 2023 г. 14:47
Ответы на вопрос 1
1. Добавьте новый скрипт к кнопке пользовательского интерфейса (UI), например, "ButtonPressDetector.cs".
2. В скрипте определите две функции: "OnButtonPressed()" и "OnButtonReleased()".
3. Создайте переменную boolean для отслеживания состояния кнопки. Назовите ее, например, "isButtonPressed".
4. В методе "OnButtonPressed()" установите переменную "isButtonPressed" в true и вызовите метод "Rotate()".
5. В методе "OnButtonReleased()" установите переменную "isButtonPressed" в false и вызовите метод "NoRotate()".
6. Используйте функции "OnPointerDown()" и "OnPointerUp()" для регистрации событий нажатия и отпускания кнопки.
7. В методе "OnPointerDown()" вызовите "OnButtonPressed()", а в методе "OnPointerUp()" вызовите "OnButtonReleased()".
8. Назначьте скрипт "ButtonPressDetector" кнопке пользовательского интерфейса в Unity Inspector.

Пример кода в "ButtonPressDetector.cs":

```csharp
using UnityEngine;
using UnityEngine.EventSystems;

public class ButtonPressDetector : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    private bool isButtonPressed = false;

    public void OnPointerDown(PointerEventData eventData)
    {
        OnButtonPressed();
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        OnButtonReleased();
    }

    private void OnButtonPressed()
    {
        isButtonPressed = true;
        Rotate();
    }

    private void OnButtonReleased()
    {
        isButtonPressed = false;
        NoRotate();
    }

    public void Rotate()
    {
        if (build_prefab != null)
        {
            build_prefab.transform.Rotate(0, 1, 0);
        }
    }

    public void NoRotate()
    {
        if (build_prefab != null)
        {
            build_prefab.transform.Rotate(0, 0, 0);
        }
    }
}
```

После привязки этого скрипта к кнопке пользовательского интерфейса, когда пользователь будет нажимать на кнопку, она будет вызывать метод "Rotate()" до тех пор, пока кнопка не будет отпущена, после чего будет вызываться метод "NoRotate()".
Похожие вопросы