एकता में C # भिन्न है?


18

क्या एकता C # के किसी भिन्न संस्करण का उपयोग करती है, या क्या यह सभी समान है? यह नियमित C # से अलग दिखता है लेकिन इसमें कुछ नियमित C # तत्व होते हैं।


4
आप क्या अंतर देखते हैं?
एको

मुझे लगता है कि आप जिन बदलावों की बात कर रहे हैं, उनमें फ्रेमवर्क अंतर है न कि सी # भाषा। यूनिटी 3 डी में आप। नेट फ्रेमवर्क (वाया मोनो) और यूनिटी विशिष्ट फ्रेमवर्क तत्वों का उपयोग सी # भाषा के साथ कर रहे हैं।
माइक बी

यह अभी बहुत पुराना संस्करण है। यदि आप C # और मोनो का नवीनतम संस्करण चाहते हैं और स्क्रिप्ट को पूर्व-निर्मित इंजन के बजाय प्रोग्राम करना चाहते हैं, तो monogame.net
Den

मैंने पुस्तकालय के मामूली अंतरों पर ध्यान दिया, उदाहरण के लिए गणित में मैथ क्लास के बजाय गणित कार्यों के लिए एक गणित वर्ग है। यदि अन्य मतभेद हैं, तो मैंने ध्यान नहीं दिया है, लेकिन यह वही है जो बाहर खड़ा था।
एलेक्स

@Alex System.Math अभी भी उपलब्ध है, और जाहिरा तौर पर वास्तव में UnityEngine.Mathf से तेज है । तो एकता संस्करण का उपयोग करने का एकमात्र वास्तविक कारण कुछ प्रदर्शनों की कीमत पर बहुत सारे (फ्लोट) कलाकारों से बचना है।
फ्लिंट्ज़ा

जवाबों:


9

जैसा कि अन्य उत्तरों में कहा गया है कि एकता 4.x मोनो मोनो 2.6 के आधार पर मोनो के संशोधित संस्करण का उपयोग करता है

अधिकांश भाग के लिए, यह .Net 2.0 के साथ संगत है , हालांकि मैं एक मोनो 2.6 विशिष्ट संगतता सूची को ट्रैक करने में कामयाब नहीं हुआ हूं।

यह नियमित C # से अलग दिखता है लेकिन इसमें कुछ नियमित C # तत्व होते हैं।

जैसा कि आपके प्रश्न पर एक टिप्पणी में उल्लेख किया गया है, यह संभवत: भाषा के बजाय एकता की विशेष स्क्रिप्टिंग एपीआई के कारण है।

एक उदाहरण के रूप में, एक विशिष्ट एकता परियोजनाओं में बहुत से कोड मोनोबेहेवियर नामक एक वर्ग के उपवर्गों में निहित हैं। ये ऐसे घटक हैं जो एकता संपादक वातावरण में GameObjects पर गिराए जाते हैं। यह आर्किटेक्चर C # कोड की ओर जाता है जो विशिष्ट C # कोड को अलग दिखता है (मुझे वैसे भी) कई तरीकों से:

  • जब तक एकता 4 जारी नहीं किया गया था, तब तक ये ऑब्जेक्ट नामस्थानों में शामिल नहीं हो सकते थे, इसलिए वे हमेशा वैश्विक नामस्थान में होते हैं
  • वे संपादक वातावरण में फ़ील्ड्स को सार्वजनिक करते हैं (या SerializeField विशेषता का उपयोग करके, लेकिन मुझे लगता है कि बहुत कम लोग इसका उपयोग करते हैं), जो कक्षाओं में सार्वजनिक रूप से बड़ी संख्या में सार्वजनिक क्षेत्रों की ओर जाता है
  • एकता की गोपनीयता और केस कन्वेंशन Microsoft का अनुसरण नहीं करते हैं, इसलिए यह "पारंपरिक" C # डेवलपर के लिए भी अजीब लग सकता है
  • वे इन घटकों पर कई विशेष विधियों का उपयोग करते हैं, जैसे कि स्टार्ट और अपडेट, जो ओवरराइड नहीं होते हैं जैसा कि आम तौर पर उम्मीद करते हैं, लेकिन इसके बजाय प्रतिबिंब के माध्यम से एक्सेस किया जाता है।

व्यावहारिक रूप से, एकता की वर्तमान C # संस्करण में सबसे बड़ी C # भाषा सुविधा मुझे याद आती है जो async और संबंधित कीवर्ड और कार्यक्षमता के लिए समर्थन है। यूनिटी में इसी तरह की अवधारणा कोरटाइन है । ये मुख्य थ्रेड पर निष्पादित होते हैं इसलिए सही async नहीं हैं, लेकिन लंबे समय तक चलने वाले कोड को कई फ़्रेमों पर विभाजित करने की अनुमति देते हैं। निचले स्तर का मल्टीथ्रेडिंग अभी भी समर्थित है।


2
बस स्पष्ट करने के लिए, asyncसी # में भी बहु-थ्रेड में async सच नहीं है - यह मुख्य धागे पर भी चलता है। कॉरटाइन्स और एसिंक्स के बीच उपयोग के दृष्टिकोण से सबसे बड़ा अंतर कई बार कोड चलाया जाता है।
rhughes

धन्यवाद। हाँ async! = Multithreaded, हालाँकि मैं कहूँगा कि यह multithreaded ऑपरेशन के साथ छिपाने / बातचीत करने के लिए async का उपयोग करना कहीं अधिक सामान्य है क्योंकि यह कोरटाइन के साथ भी ऐसा ही करेगा। मैंने एक रैपर कॉरौटाइन लिखा है जो एक थ्रेडपूल पर प्रतिनिधि कार्यों को बंद कर देता है जो मुझे बहुत समान स्तर का लचीलापन देता है, लेकिन मुझे अभी भी "उचित" async समर्थन प्राप्त नहीं होगा। बेशक एक सभ्य आधुनिक जीसी और भी बेहतर होगा;)
फ्लिंटा

21

एकता 4 में मोनो 2.6 का उपयोग किया गया है, जो कि C # भाषा सहित .NET फ्रेमवर्क का पूर्ण कार्यान्वयन है।

मुझे यकीन नहीं है कि यह अलग कैसे दिखता है, लेकिन ध्यान रखें कि एकता कई भाषाओं का समर्थन करती है, जिनमें से सभी एक ही मोनो रनटाइम के शीर्ष पर काम करती हैं। क्या यह संभव है कि आप यूनिटीस्क्रिप्ट के साथ सी # को भ्रमित कर रहे हैं ?


10
जोड़ने के लिए, मोनो 2.6 भाषा सुविधाओं के मामले में C # 3.0 के बराबर है। मोनो 2.6.1 ने सी # 4.0 सुविधाओं को जोड़ना शुरू किया।
कूपर

यहाँ v4.1.2 के रूप में एकता की मोनो कम्पेटिबिलिटी का अच्छा अवलोकन किया गया है
केली थॉमस

यह केवल मामूली नहीं बल्कि एक प्रमुख संस्करण वृद्धि है: mono-project.com/Release_Notes_Mono_3.4
Den

3

एकता नियमित C # का उपयोग करती है।

फिर से, जब आप एकता में C # लिखते हैं, तो आप उनके पुस्तकालयों का बहुत उपयोग कर रहे होंगे, लेकिन जहाँ तक मुझे पता है, C # में सब कुछ संभव है एकता में, नीचे सूचीबद्ध मतभेदों के अलावा अन्य संभव है:

  • विंडोज फॉर्म और एएसपी से संबंधित .Net के अधिक विशिष्ट क्षेत्र एकता के माध्यम से सीमाएं हैं।

  • जब आप संपादन और संकलन-समय त्रुटियों के लिए विज़ुअल स्टूडियो का उपयोग कर सकते हैं, तो आपको एकता आईडीई में निर्माण और चलाना होगा।

  • एकता मोनो का उपयोग करती है जो कि .Net का एक खुला स्रोत कार्यान्वयन है जिसका अर्थ है कि मामूली अंतर हैं।


अपनी दूसरी बुलेट पर विस्तार करने के लिए - आप Visual Studio के भीतर UnityVS का उपयोग करके भी डिबग कर सकते हैं । Microsoft ने हाल ही में डेवलपर्स का अधिग्रहण किया है ताकि वे निकट भविष्य में मुफ्त में प्लगइन जारी करेंगे।
मूरफ्लोर

क्षमा करें, लेकिन यह नियमित C # के पास नहीं है।
Alper

0

यह सवाल कि क्या एकता द्वारा प्रयुक्त C # संस्करण एक "नियमित" C # से भिन्न है, अन्य पदों द्वारा उत्तर दिया गया है। आप स्पष्ट रूप से एकता में कुछ तत्व है जो इस तरह के एक नियमित संस्करण से अलग हो सकती मैं केवल मामूली अंतर मैंने देखा जब काम पर सी # मैं उपयोग की तुलना साझा करेंगे (विजुअल स्टूडियो 2010 में यानी सी # 4.0 और उच्चतर) और सी #, के लिए पूछ रहे हैं के बाद से जो यह है कि मैं फ़ंक्शन परिभाषाओं में मापदंडों के लिए डिफ़ॉल्ट मानों का उपयोग नहीं कर सकता। वह यह है कि आपको C # के नए संस्करण का उपयोग करने के लिए अपनी परियोजना को अधिक सावधानी से स्थापित करना होगा। आगे की व्याख्या के लिए इस लिंक को देखें ।

संपादित करें: मैं इस उत्तर को तब से छोड़ता हूं जब तक मुझे पता है कि यह गलतफहमी है जो काफी लोगों को होती है।


जैसा कि उस सुविधा को केवल संस्करण 4.0 में C # में जोड़ा गया था और पहले मौजूद नहीं था, इसकी अनुपस्थिति को वास्तव में "C #" में "अंतर" नहीं कहा जा सकता है।
या मैपर

1
सी # संस्करण 4 2010 में जारी किया गया था। मुझे लगता है कि बहुत से लोग इसका उपयोग कर रहे हैं और महसूस कर रहे हैं, मेरी तरह, एकता में प्रोग्रामिंग करते समय इसकी अनुपस्थिति।
नेसुनो

क्या आप वाकई डिफ़ॉल्ट मान का उपयोग नहीं कर सकते हैं? मुझे पूरा यकीन है कि मैं ऐसा
करूंगा

खैर मैंने कोशिश की और यह एक संदेश के साथ संकलित नहीं करेगा जो मुझे बता रहा है कि मैं डिफ़ॉल्ट मूल्यों का उपयोग नहीं कर सकता। क्या आप एकता के विशेष संस्करण का उपयोग कर रहे हैं? प्रो संस्करण की तरह?
नेसूनो

1
आप डिफ़ॉल्ट मानों का पूरी तरह से उपयोग कर सकते हैं, और इसका प्रो या प्रो के साथ कोई लेना-देना नहीं है। एकता और मोनडेवेल्ड का एक अजीब रिश्ता है। मोनो-डिवेलप्ड में स्वतः-जेनरेट की गई परियोजनाएँ अक्सर C # के पूर्व संस्करणों में सेट की जाती हैं जो डिफ़ॉल्ट मानों का समर्थन नहीं करती हैं। हालाँकि यदि आप उस सेटिंग को प्रोजेक्ट में बदलते हैं, तो यह ठीक काम करेगा। यदि आप MonoDevelop में संकलन की उपेक्षा करते हैं, और बस एकता में वापस जाते हैं, तो आप ध्यान देंगे कि एकता डिफ़ॉल्ट मापदंडों के बारे में शिकायत नहीं करती है।
MrCranky
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.