반응형
유니티는 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:
Unity Pro:
Unity 프리미엄 학습:
반응형
'개발 > Unity' 카테고리의 다른 글
유니티 Attribute - 에디터 플레이 후 씬 자동 저장 (Unity Auto Saving In Editor) (0) | 2022.03.11 |
---|---|
유니티 스크립트 추상 클래스와 상속 (0) | 2022.03.10 |
유니티 - 게임 오브젝트 기준으로 카메라 움직이기 (0) | 2022.03.07 |
유니티 - 1인칭 시점 조작 first person view controller (0) | 2022.03.06 |
유니티 - 마우스로 카메라 회전하기 (오일러 각) (4) | 2022.03.05 |
댓글