मैं एकता में एक नौसिखिया हूँ और मैं कस्टम टाइल डिजाइन के साथ एक शतरंज बोर्ड की तरह, रेल आंदोलन के साथ एक शीर्ष नीचे कालकोठरी क्रॉलर बना रहा हूं। क्षैतिज रूप से स्वाइप करने से खिलाड़ी को 90 डिग्री दक्षिणावर्त या वामावर्त तय किया जाता है, यह निर्भर करता है कि स्वाइप दाईं ओर या बाईं ओर था, और ऊपर की ओर स्वाइप करने से खिलाड़ी के सामने टाइल की ओर आगे बढ़ता है, कालकोठरी एक ग्राफ़ है और टाइलें नोड्स हैं।
समस्या यह है कि, यह महत्वपूर्ण है कि कैमरा खिलाड़ी के साथ घूमता है, इसलिए मैंने कैमरे को प्लेयर ऑब्जेक्ट के बच्चे के रूप में रखा और यह मेरी भविष्यवाणी के अनुसार घूमता रहा, लेकिन तब मुझे एहसास हुआ कि स्पर्श इनपुट के लिए धुरी बदल गई है जैसे कि मैंने स्पिन किया था मेरा स्मार्ट फोन 90 डिग्री, धुरी कैमरे से बंधी हुई है।
मैं Camera.main.ScreenToWorldPoint
का उपयोग स्वाइप के पहले और अंतिम अंक प्राप्त करने के लिए करता हूं।
मैं स्क्रीन के सापेक्ष स्पर्श और रिलीज स्पॉट से x
और y
की भिन्नता का उपयोग कर रहा हूं यदि Input.GetTouch(0).phase
TouchPhase.Ended
है:
deltaX = releaseX - touchX;
deltaY = releaseY - touchY;
touchX
और touchY
, touchPosition
वेरिएबल से आते हैं जो स्क्रीन के सापेक्ष पहली टच पोजीशन रखता है, releaseX
और touchY
वेरिएबल से आते हैं जो करंट टच को होल्ड करता है। GetTouch(0)
की स्थिति के बाद से यह कभी भी अद्यतन बदलता है।
ऊपर स्वाइप करें यदि deltaY
1 से अधिक है, तो इसका मतलब है कि एक अच्छा स्वाइप अप था, लेकिन चूंकि मैं बहुत विकर्ण स्वाइप नहीं चाहता, deltaX
को -1 और 1 सहिष्णुता के बीच होना चाहिए, यदि स्वाइप नहीं है नजरअंदाज किया जाता है।
दाईं ओर स्वाइप करें यदि deltaX
1 से अधिक है, तो इसका मतलब है कि दाईं ओर एक अच्छा स्वाइप था, क्योंकि मुझे बहुत विकर्ण स्वाइप नहीं चाहिए, deltaY
को -1 और 1 सहिष्णुता के बीच होना चाहिए, यदि स्वाइप को नजरअंदाज नहीं किया जाता है।
बाईं ओर स्वाइप करें यदि डेल्टाएक्स -1 से कम है, तो इसका मतलब है कि बाईं ओर एक अच्छा स्वाइप था, क्योंकि मैं बहुत विकर्ण स्वाइप नहीं करना चाहता, डेल्टा को -1 और 1 सहिष्णुता के बीच होना चाहिए, अगर स्वाइप को नजरअंदाज नहीं किया जाता है .
तर्क तब तक काम करता है जब तक कैमरा स्पिन नहीं हो जाता है, मान लीजिए कि मैं दाईं ओर स्वाइप करता हूं, क्योंकि कैमरा घूमता है, इसकी धुरी भी घूमती है जैसे कि मैंने अपने फोन को अपने हाथों से घुमाया, अक्ष को वामावर्त घुमाया गया, दाईं ओर स्वाइप करने का प्रभाव है नीचे।
मैंने ScreenToWorld
के उपयोग से छुटकारा पा लिया और बिंदुओं के मूल्यों को जानने के लिए कंसोल को देखा, लेकिन कोड अभी भी काम नहीं करता है क्योंकि x
और y
के प्रत्येक मान होना चाहिए वही स्क्रीन पर एक ही स्थान के लिए, कैमरा हिलने पर दुनिया के मूल्य बदल जाएंगे, इसलिए कैमरा को हिलाने से स्वाइप लॉजिक गड़बड़ा जाएगा क्योंकि यह कुछ ऐसा है जो स्मार्टफोन स्क्रीन के सापेक्ष है, न कि दुनिया से।
बिंदु पी (0,0) की कल्पना करें, मुझे लगता है कि मुझे हमेशा स्क्रीन का केंद्र होने की आवश्यकता है क्योंकि मैं इसे स्वाइप के प्रकार की गणना करने के लिए संदर्भ के रूप में उपयोग करूंगा और यदि यह मान्य है। ScreenToWorld
और कैमरे का उपयोग करके मैंने यह करना सीखा। हो सकता है कि अगर मेरे पास स्क्रीन के केंद्र में एक एंकर है तो मैं कैमरे का उपयोग करने के बजाय इसके साथ ScreenToWorld
का उपयोग कर सकता हूं। मुझे लगता है कि डेवलपर्स के लिए स्पर्श और कैमरे से निपटना मुश्किल है, इसलिए इसे करने का एक पारंपरिक तरीका होना चाहिए।
मैं इस समस्या का समाधान कैसे कर सकता था?
1 उत्तर
आप कैमरे के सापेक्ष स्पर्श की स्थिति प्राप्त करना चाहते हैं। ScreenToWorldPoint
के बजाय ScreenToViewportPoint
का प्रयोग करें। आपको शायद एक छोटी सीमा का उपयोग करने की आवश्यकता होगी, क्योंकि यह विश्व इकाइयों के बजाय व्यूपोर्ट कवरेज के संदर्भ में व्यक्त की जाती है।
संबंधित सवाल
नए सवाल
unity3d
यूनिटी एक क्रॉस-प्लेटफॉर्म गेम इंजन है जो यूनिटी टेक्नोलॉजीज द्वारा बनाया गया है।