본문 바로가기
Programming/Unity

[Unity3D] 마우스 더블 클릭 이벤트 ( UI, 3D Object )

by 타임박스 2021. 11. 24.
반응형


✔ Unity3D - MouseEvent 

DoubleClick Script - Object, UI



 

3D 오브젝트의 지원되는 마우스 이벤트의 경우 OnMouseDown(), OnMouseUp(), OnMouseOver() 등등이 있다.

다른건 다 있는데 클릭이나, 더블클릭 같은 경우에는 지원되지 않아 직접 만들어서 사용해야한다.

(지원좀 해주지... )

먼저 지원되는 기본적인 마우스 이벤트부터 알아보자

OnMouseDown() : 마우스가 눌러졌을때 발생되는 이벤트

OnMouseUp() : 마우스가 눌러진 상태에서 놓았을때 발생되는 이벤트

OnMouseEnter() : 마우스가 해당 객체의 콜라이더 범위에 들어왔을때 이벤트

OnMouseExit() : 마우스가 해당 객체의 콜라이더 범위에 밖으로 빠져나갔을때 이벤트

OnMouseOver() : 마우스가 해당 객체의 콜라이더 범위에 존재할때 발생되는 이벤트

(OnMouseEnter랑 비슷해보이지만 Enter는 콜라이더 안으로 진입할때 한번만 발생되지만 Over는 계속발생)

위 이벤트가 발생되기 위해서는 객체가 콜라이더를 포함하고 있어야 발생된다.

 

아래는 더블클릭 이벤트를 제작한 스크립트다.

특정 타임안에서 두번 Up이벤트가 발생되면 더블클릭을 판단한다.

● 더블클릭 이벤트 코드 ( 3D 오브젝트 )

using UnityEngine;

public class InputControl : MonoBehaviour
{
    float clickTime = 0;
    void OnMouseUp()
    {
        if ((Time.time - doubleClickStart) < 0.3f)
        {
            OnMouseDoubleClick();
            clickTime = -1;
        }
        else
        {
            clickTime = Time.time;
        }
    }
    void OnMouseDoubleClick()
    {
        Debug.Log("Double Clicked!");
    }
}

 

● 더블클릭 (UI 오브젝트)

- 3D 오브젝트와 크게 다르지 않다. OnMouseUp 대신 IPointerClickHandler 인터페이스로 구현한다.

using UnityEngine;
using UnityEngine.EventSystems;

public class InputControl : MonoBehaviour, IPointerClickHandler
{
    float clickTime = 0;

    void OnMouseDoubleClick()
    {
        Debug.Log("Double Clicked!");
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        if ((Time.time - clickTime) < 0.3f)
        {
            OnMouseDoubleClick();
            clickTime = -1;
        }
        else
        {
            clickTime = Time.time;
        }
    }
}

 

감사합니다.

반응형

댓글