यहाँ जो मैं समझने और जानने की कोशिश कर रहा हूँ, वह एक बहुत ही बुनियादी बात है: C # का उपयोग करते हुए, एकता में 3 मुख्य माउस बटन के लिए सिंगल-क्लिक और डबल-क्लिक को ठीक से अलग करने का सबसे सामान्य और सबसे पॉलिश तरीका क्या है ?
ठीक से शब्द पर मेरा जोर कुछ नहीं के लिए है। हालांकि मुझे आश्चर्य था कि ऐसा लगता है कि इस वेबसाइट में पहले कभी नहीं पूछा गया था, बेशक मैंने यूनिटी के मंचों और यूनिटी के स्वयं के प्रश्न-उत्तर पृष्ठों पर कई समान प्रश्न खोजे और पाए हैं। हालांकि, जैसा कि अक्सर इन संसाधनों में पोस्ट किए गए उत्तरों के साथ होता है, वे सभी या तो सादे गलत लग रहे थे या कम से कम थोड़ा बहुत शौकिया थे।
मुझे समझाने दो। प्रस्तावित समाधान हमेशा दो दृष्टिकोणों और उनके संगत दोषों में से एक थे:
- हर बार एक क्लिक होता है, अंतिम क्लिक के बाद से समय डेल्टा की गणना करें और यदि यह किसी दिए गए सीमा से छोटा था, तो डबल क्लिक का पता लगाया जाएगा। हालाँकि, इस समाधान के परिणामस्वरूप डबल क्लिक का पता चलने से पहले एक त्वरित सिंगल क्लिक का पता लगाया जाता है, जो अधिकांश स्थितियों में अवांछनीय होता है क्योंकि तब यह सिंगल और डबल क्लिक दोनों क्रियाओं को सक्रिय करता है।
किसी न किसी उदाहरण:
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;
}
- सक्रिय होने के लिए सिंगल-क्लिक में देरी के लिए सेट करें, जिसका अर्थ है, प्रत्येक क्लिक पर, केवल एक क्लिक क्रिया को सक्रिय करें यदि अंतिम क्लिक के बाद का समय देरी किसी दिए गए सीमा से ऊपर है। हालाँकि, यह सुस्त परिणाम देता है, क्योंकि एकल-क्लिक का पता लगाने से पहले प्रतीक्षा को नोटिस करना संभव है। इससे भी बदतर, इस तरह का समाधान मशीनों में विसंगतियों से ग्रस्त है, क्योंकि यह इस बात पर ध्यान नहीं देता है कि ओएस स्तर पर उपयोगकर्ता की डबल-क्लिक गति सेटिंग कितनी धीमी या तेज़ है।
किसी न किसी उदाहरण:
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 # का उपयोग करते हुए एकता में दोहरे क्लिकों का पता लगाने का एक अधिक पॉलिश और विश्वसनीय तरीका है, और एक जो उपरोक्त समस्याओं को संभालता है?