Programming/Unity
[Unity3D] 마우스 더블 클릭 이벤트 ( UI, 3D Object )
타임박스
2021. 11. 24. 23:01
반응형
✔ 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;
}
}
}
감사합니다.
반응형