Unity/UI

유니티 UI 롱 버튼 구현

홍삼맛 2024. 2. 6. 14:36

구현 소개

방치형 게임 특성상 재화를 많이 버는 만큼 여러 스탯을 강화하는데 그 강화 횟수는 방대한 편이다.

이걸 일일이 버튼을 누르면서 강화하면 유저들의 불편함이 생김, 이를 해소하고자 롱 버튼 기능을 구현해야 한다.


기능 구현

롱 버튼 제어

private void OnPointerDown(PointerEventData eventData)
{
    isPointerDown = true;
    pressTime = DateTime.Now;
    StartCoroutine(HoldPressListener());
}

private void OnPointerUp(PointerEventData eventData)
{
    isPointerDown = false;
    isHoldPressed = false;
    upgradeDelay = 0.05f;
}
  • 인터페이스 OnPointerUp, OnPointerDown을 이용해 롱버튼 제어

코루틴 롱 버튼 리스너

private IEnumerator HoldPressListener()
{
    while (isPointerDown)
    {
        double elapsedSeconds = (DateTime.Now - pressTime).TotalSeconds;

        if (elapsedSeconds >= 0.25f && !isHoldPressed)
        {
            isHoldPressed = true;
        }
        else if (elapsedSeconds >= 2.5f && isHoldPressed)
        {
            upgradeDelay = 0.01f;
            yield break;
        }

        yield return new WaitForSeconds(0.1f);
    }
}
  • 버튼을 누른 후, 딜레이를 계산하여 롱 버튼 구현, 롱 버튼 지속 후에 몇 초간 더 누르고 있으면 강화 속도가 빨라짐