2012-11-13 17 views
8

मैं "परत टकराव मैट्रिक्स" एकता में दिखाया गया है की तरह संपादक में एक दो आयामी सरणी को दिखाने के लिए कोशिश कर रहा हूँ: enter image description hereएकता कस्टम संपादक की तरह 'लेयर टकराव की मैट्रिक्स'

हालांकि चेक बॉक्स के बजाय मैं की जरूरत है स्याही, और एक पूर्ण ग्रिड (त्रिभुज आकार नहीं।) मुझे यह पता लगाना प्रतीत नहीं होता कि यह कैसे करना है ... हालांकि मैं एक कस्टम संपादक प्राप्त कर सकता हूं, हालांकि ग्रिड विफल हो जाता है। तो, क्या कोई तरीका है कि मैं भौतिकी प्रबंधक के संपादक (लेयर टकराव मैट्रिक्स में है) का कोड देख सकता हूं या शायद कोई ऐसा करने का एक अच्छा तरीका जानता है?

नोट: पसंदीदा भाषा सी # है, हालांकि कोई भी करेगा।

धन्यवाद।

उत्तर

6

जो भी आप खोज रहे हैं उसमें शामिल कोड बहुत जटिल है, इसलिए मैं आपको यह जानने के लिए भरोसा कर रहा हूं कि मैं यहां किस बारे में बात कर रहा हूं। The Unity docs are your friend.

  1. एक GUIArea जहां अपने विशेष संपादक उपकरण होगा बनाएँ। इसके अंदर, फ़ंक्शन कॉल रखें जो फिर अन्य प्रतिपादन कार्यों को कॉल करेगा। मैं संदेह करता हूं कि आप यहां कुछ encapsulation करना चाहते हैं। किसी अन्य फ़ंक्शन में गुई को एन्सेप्लेट करने से आप इसकी कार्यक्षमता को डुप्लिकेट कर सकते हैं (आपके अबास्ट्रक्शन की सीमाओं के भीतर) और स्क्रीन पर चीजों को आसानी से ले जा सकते हैं।

  2. डिजाइन तीन एंकर पॉइंट (Vector2)। उन्हें प्रत्येक पंक्ति लेबल, कॉलम लेबल और डेटा फ़ील्ड के शीर्ष-बाएं समन्वय का प्रतिनिधित्व करना चाहिए। ध्यान दें कि कॉलम एंकर को पंक्ति एंकर के ऊपर सीधे (उसी x-value) की आवश्यकता होती है, क्योंकि घूर्णन (अगला चरण) एंकर को बदल देगा।

  3. उपयोग GUIUtility.RotateAroundPivot() को घुमाने के लिए जीयूआई स्तंभ लंगर बिंदु के आसपास 90 डिग्री तक मैट्रिक्स को बदलने।

  4. अपने लेबल के लिए एक लंबे GUI.Label (या उनमें से कई) लिखें। कॉलम एंकर पर उन्हें एंकर करें। उपर्युक्त छवि के अनुसार, आपका लेबल स्ट्रिंग "डिफ़ॉल्ट \ n ट्रांस्पेरेंटफ़ैक्स \ n इग्नोररेकास्ट \ n वाटर" जैसे कुछ पढ़ सकता है जहां \ n एक नई लाइन बनाता है।

  5. फिर से घुमाएं, -90 डिग्री मूल मैट्रिक्स पर वापस जाएं। वैकल्पिक रूप से, आप चरण 3 से पहले GUI.matrix कॉपी कर सकते हैं, फिर इसे गारंटीकृत मैट्रिक्स रीसेट के लिए वापस असाइन करें। फ्लोटिंग-पॉइंट और अन्य अपर्याप्तता के कारण पीछे और पीछे घूमने में कुछ त्रुटि हो सकती है।

  6. पंक्तियों के लिए लेबल लिखें। दो कदम पीछे की तरह ही विधि। एंकर उन्हें पंक्ति एंकर पर।

  7. यह कठिन हिस्सा है। अपने डेटा फ़ील्ड के माध्यम से Iterate, छोटे EditorGUI.IntField() या StringField() या यहां तक ​​कि ObjectField() आपके डेटा में प्रत्येक तत्व के लिए Iterate। प्रत्येक तत्व को अपने स्वयं के एंकर की आवश्यकता होगी, जिसे तब डेटा फ़ील्ड एंकर के साथ सम्मिलित किया जाता है। यदि आपका डेटा फ़ील्ड एक वर्ग 2 डी सरणी है, तो एंकरों को प्राप्त करना आसान होगा - हालांकि आपके सरणी में खाली तत्व भी होंगे (यदि आप ऊपर वर्णित सटीक कार्यक्षमता चाहते हैं)।यदि आप मेमोरी को संरक्षित करना चाहते हैं, तो आपको कुछ मुश्किल गणित का उपयोग करके तत्व अनुक्रमणिका को निर्देशांक में बदलना होगा। मुझे यकीन है कि मेरे शीर्ष के ऊपर से मैं यह कैसे करूँगा।

आशा है कि मैं कुछ भी नहीं भूल रहा हूं। एकता की जीयूआई एक बी ---- है। टिप्पणी करें और मैं आपकी मदद करने के लिए अपनी पूरी कोशिश करूंगा।

+1

धन्यवाद, अच्छा लग रहा है। मुझे RotateAroundPivot चीज़ के बारे में पता नहीं था (और स्पष्ट रूप से इसे खोजने के लिए पर्याप्त रूप से पर्याप्त खोज नहीं किया गया था।) बाकी अपेक्षाकृत सरल दिखते हैं (हालांकि, जैसा कि आपने कहा था, जीयूआई एक बार थोड़ा परेशान हो सकता है।) धन्यवाद! जब मैं इसे बनाउंगा तो मैं अपना कोड पोस्ट करूंगा, हालांकि समय पर एटीएम नहीं है, इसलिए कुछ समय हो सकता है। –

+0

खुशी है कि यह अभी भी प्रासंगिक है। मैंने देखा कि सवाल दो महीने पुराना है: पी – cjcurrie

+1

हाँ, वर्तमान में मैंने इसे कम उपयोगकर्ता के अनुकूल तरीके से हल किया, लेकिन यह ठीक था क्योंकि यह सिर्फ मुझे है जिसका उपयोग करना है। –

संबंधित मुद्दे