Chico3001
Chico3001

Reputation: 1963

unity run a function as long a button is pressed in the inspector

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...

Upvotes: 0

Views: 4991

Answers (1)

Programmer
Programmer

Reputation: 125445

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.

Upvotes: 5

Related Questions