본문 바로가기

Unity/구현

[Unity 유니티] 버튼을 누르고 있으면 반복 실행되게 만들기

버튼을 여러번 눌러야 되는 상황에서 사용자에게 편리함을 제공하기 위해,

버튼을 정해진 시간 이상 누르고 있으면 일정 시간마다 함수를 실행시킨다.

using UnityEngine;
using UnityEngine.EventSystems;

public class ButtonHoldHandler : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    private bool isButtonHold = false; // 버튼을 누르고 있는지 여부

    private float holdDuration = 0.5f; // n초 동안 누르고 있으면 시작
    private float repeatInterval = 0.2f; // n초 마다 실행
    private float holdTimer = 0f;
    private float repeatTimer = 0f;

    public void OnPointerDown(PointerEventData eventData)
    {
        isButtonHold = true;
        holdTimer = 0f;
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        isButtonHold = false;
        holdTimer = 0f;
    }
    
    private void Update()
    {
        if (isButtonHold)
        {
            holdTimer += Time.deltaTime;
            repeatTimer += Time.deltaTime;
            if (holdTimer >= holdDuration)
            {
                if (repeatTimer >= repeatInterval)
                {
                    repeatTimer = 0f;
                    // 실행할 코드
                }
            }
        }
    }
}