여기에서 이해하고 배우려고하는 것은 매우 기본적인 것입니다 .C #을 사용하여 Unity의 3 가지 주요 마우스 버튼에 대한 단일 클릭과 이중 클릭 을 올바르게 구별 하는 가장 일반적이고 가장 세련된 방법은 무엇입니까?
단어에 내 중점을 제대로 아무것도 아니다. 이전에이 웹 사이트에서이 질문을 한 적이없는 것 같습니다. 물론 Unity 포럼과 Unity 자체의 질문-답변 페이지에서 비슷한 질문을 많이 검색했습니다. 그러나 이러한 리소스에 답변이 게시 된 경우가 많기 때문에 모두 명백한 잘못이거나 최소한 너무 아마추어적인 것 같습니다.
설명하겠습니다. 제안 된 솔루션에는 항상 두 가지 접근 방식과 해당 결함이 있습니다.
- 클릭이 발생할 때마다 마지막 클릭 이후 시간 델타를 계산하고 주어진 임계 값보다 작 으면 더블 클릭이 감지됩니다. 그러나이 솔루션을 사용하면 더블 클릭이 감지되기 전에 빠른 싱글 클릭이 감지되므로 싱글 클릭과 더블 클릭 동작이 모두 활성화되므로 대부분의 상황에서 바람직하지 않습니다.
대략적인 예 :
float dclick_threshold = 0.25f;
double timerdclick = 0;
if (Input.GetMouseButtonDown(0)
{
if (Time.time - timerdclick) > dclick_threshold)
{
Debug.Log("single click");
//call the SingleClick() function, not shown
} else {
Debug.Log("double click");
//call the DoubleClick() function, not shown
}
timerdclick = Time.time;
}
- 단일 클릭이 활성화 될 때까지 대기 지연을 설정합니다. 즉, 모든 클릭에서 마지막 클릭 이후 시간 지연이 지정된 임계 값을 초과하는 경우 단일 클릭 동작 만 활성화합니다. 그러나 한 번의 클릭이 감지되기 전에 대기하는 것을 알 수 있기 때문에 결과가 느리게 나타납니다. 그보다 더 나쁜 것은 이러한 종류의 솔루션은 OS 수준에서 사용자의 두 번 클릭 속도 설정이 얼마나 느리거나 얼마나 빠르지 않기 때문에 여러 시스템에서 불일치가 발생한다는 것입니다.
대략적인 예 :
float one_click = false;
float dclick_threshold = 0.25f;
double timerdclick = 0;
if (one_click && ((Time.time - timerdclick) > dclick_threshold))
{
Debug.Log("single click");
//call the SingleClick() function, not shown
one_click = false;
}
if (Input.GetMouseButtonDown(0))
{
if (!one_click)
{
dclick = -1;
timerdclick = Time.time;
one_click = true;
}
else if (one_click && ((Time.time - timerdclick) < dclick_threshold))
{
Debug.Log("double click");
//call the DoubleClick() function, not shown
one_click = false;
}
}
따라서 제 질문은 다음과 같습니다. 이러한 솔루션 외에 C #을 사용하여 Unity에서 더블 클릭을 감지하고 앞에서 언급 한 문제를 처리하는보다 세련되고 안정적인 방법이 있습니까?