0

I'm a newbie in Unity

Using Unity Inspector i have setup a button that makes a callback to a function (OnClick), it works fine but only once, to fire the action again i need to release and click the button again

How can i make that the function keeps running over and over as long as the button is pressed? (like a machine gun)

public void MoveLeft ( )
{
    transform.RotateAround(Camera.main.transform.position, Vector3.up, -rotation / 4 * Time.deltaTime);
    infopanel.RotateAround(Camera.main.transform.position, Vector3.up, -rotation / 4 * Time.deltaTime);
}

Regards...

Programmer
  • 114,125
  • 20
  • 214
  • 306
Chico3001
  • 1,715
  • 1
  • 18
  • 39

1 Answers1

4

The OnClick can't do this. Use OnPointerDown and OnPointerUp. Set a boolean variable to true/false in these function respectively then check that boolean variable in the Update function

Attach to the UI Button object:

public class UIPresser : MonoBehaviour, IPointerDownHandler,
    IPointerUpHandler
{
    bool pressed = false;

    public void OnPointerDown(PointerEventData eventData)
    {
        pressed = true;
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        pressed = false;
    }

    void Update()
    {
        if (pressed)
            MoveLeft();
    }

    public void MoveLeft()
    {
        transform.RotateAround(Camera.main.transform.position, Vector3.up, -rotation / 4 * Time.deltaTime);
        infopanel.RotateAround(Camera.main.transform.position, Vector3.up, -rotation / 4 * Time.deltaTime);
    }
}

You can find other event functions here.

Programmer
  • 114,125
  • 20
  • 214
  • 306