본문 바로가기
개발/Unity

유니티 더블 클릭 구현하기 (Unity Double Click)

by 피로물든딸기 2022. 3. 9.
반응형

Unity 전체 링크

 

유니티는 Input에서 롱 클릭과 더블 클릭을 지원하지 않는다.

따라서 더블 클릭을 직접 구현해야한다.

 

특정 시간 안에 두 번의 클릭이 들어왔는지 확인하기 위한 interval 변수,

그리고 더블 클릭의 첫 번째 클릭 시간 doubleClickedTime, 더블 클릭이 되었는지 check할 bool 변수가 필요하다.

 

OnMouseUp에서 첫 번째 클릭이 들어오면 doubleClickedTime이 -1이기 때문에 반드시 else로 들어간다.

이후 interval 내에 두 번째 클릭이 들어오면 isDoubleClicked는 true가 된다.

 

Update에서 doubleclick을 체크한 후, bool 변수를 초기화하면 더블 클릭 감지가 완료된다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DoubleClickTest : MonoBehaviour
{
    float interval = 0.25f;
    float doubleClickedTime = -1.0f;
    bool isDoubleClicked = false;

    private void OnMouseUp()
    {
        if((Time.time - doubleClickedTime) < interval)
        {
            isDoubleClicked = true;
            doubleClickedTime = -1.0f;
        }
        else
        {
            isDoubleClicked = false;
            doubleClickedTime = Time.time;
        }
    }

    void Update()
    {
        if(isDoubleClicked)
        {
            Debug.Log("double click");
            isDoubleClicked = false;
        }
    }
}

 

OnMouseUp을 사용하였으므로 반드시 게임 오브젝트가 콜라이더를 가져야 동작한다.


UI의 더블클릭 이벤트는 IPointerClickHandler를 상속해야 한다.

IPointerClickHandler를 상속하면 OnPointerClick을 구현하지 않을 경우 컴파일 에러가 발생하게 된다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using UnityEngine.EventSystems; /* IPointerClickHandler를 위한 선언 */

public class DoubleClickButton : MonoBehaviour, IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eData) /* 반드시 구현 */
    {

    }
    
    ...

 

게임 오브젝트와 같은 방법으로 아래와 같이 구현하면 된다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using UnityEngine.EventSystems;

public class DoubleClickButton : MonoBehaviour, IPointerClickHandler
{
    float interval = 0.25f;
    float doubleClickedTime = -1.0f;
    bool isDoubleClicked = false;

    public void OnPointerClick(PointerEventData eData)
    {
        if ((Time.time - doubleClickedTime) < interval)
        {
            isDoubleClicked = true;
            doubleClickedTime = -1.0f;

            Debug.Log("double click!");
        }
        else
        {
            isDoubleClicked = false;
            doubleClickedTime = Time.time;
        }
    }
}

 

버튼을 두 번 눌렀을 때, 로그가 나오는 것을 알 수 있다.

 

하지만 더 간단한 방법은 넘겨받은 PointerEventData의 clickCount를 세는 것이다.

public class DoubleClickButton : MonoBehaviour, IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eData)
    {
        if(eData.clickCount == 2) Debug.Log("double click!");
    }
}

 

더 간단한 코드로 같은 결과를 얻을 수 있다.

 

Unity Plus:

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Unity Pro:

 

Unity Pro

The complete solutions for professionals to create and operate.

unity.com

 

Unity 프리미엄 학습:

 

Unity Learn

Advance your Unity skills with live sessions and over 750 hours of on-demand learning content designed for creators at every skill level.

unity.com

반응형

댓글