Burada anlamaya ve öğrenmeye çalıştığım şey çok temel bir şey: düzgün bir şekilde en genel ve en cilalı yol nedir C # kullanarak Unity'deki 3 ana fare düğmesi için tek tıklamaları ve çift tıklamaları ayırt nedir?
Kelimeye doğru şekilde vurgu yapıyorum hiçbir şey için değil. Bu web sitesinde daha önce hiç sorulmamış gibi görünmeme şaşırmış olsam da, elbette Unity'nin forumlarında ve Unity'nin kendi soru cevap sayfalarında çok sayıda benzer soru araştırdım ve buldum. Bununla birlikte, bu kaynaklarda gönderilen cevaplarda sıklıkla olduğu gibi, hepsi ya basit yanlış ya da en azından biraz amatörce görünüyordu.
Açıklamama izin ver. Önerilen çözümler her zaman iki yaklaşımdan birine ve ilgili kusurlarına sahipti:
- bir tıklama her gerçekleştiğinde, son tıklamadan bu yana geçen zaman deltasını hesaplayın ve belirli bir eşikten küçükse, çift tıklama algılanır. Ancak bu çözüm, çift tıklama algılanmadan önce hızlı bir tek tıklamanın algılanmasıyla sonuçlanır; bu, hem tek hem de çift tıklama eylemlerini etkinleştirdiği için çoğu durumda istenmeyen bir durumdur.
Kaba örnek:
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;
}
- tek tıklamanın etkinleştirilmesi için bir bekleme gecikmesi ayarlayın, yani her tıklamada tek tıklama işlemlerini yalnızca son tıklamadan sonraki gecikme süresi belirli bir eşiğin üzerindeyse etkinleştirin. Bununla birlikte, bu, yavaş sonuçlar verir, çünkü daha önce bir bekleme, tek tıklamalar algılanmadan önce beklemeyi fark etmek mümkündür. Daha da kötüsü, bu tür bir çözüm, makineler arasındaki tutarsızlıklardan muzdariptir, çünkü kullanıcının işletim sistemi düzeyinde çift tıklama hızı ayarını ne kadar yavaş veya ne kadar hızlı dikkate almaz.
Kaba örnek:
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;
}
}
Bu nedenle, sorularım şöyle olur. Bu çözümlerin dışında C # kullanarak Unity'de çift tıklamayı saptamanın ve yukarıda bahsedilen sorunları ele alan daha parlak ve güvenilir bir yol var mı?