2015-02-20 13 views
5

के रूप में मैं इस कोड के साथ मेरी वस्तु की छवि को बदलने की कोशिश की है (इस्तेमाल किया स्प्राइट कलाकारों के रूप में):एकता Resources.Load <Sprite> बनाम स्प्राइट

GetComponent<SpriteRenderer>().sprite = Resources.Load("GameObjects/Tiles/Hole") as Sprite; 

यह काम नहीं किया है, लेकिन इस काम (प्रयुक्त < स्प्राइट>):

GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("GameObjects/Tiles/Hole"); 

क्या अंतर है?

+1

क्या आपके पास "होल" नामक आपकी परियोजना में कई फ़ाइलें हैं? एक आदेश एक संपत्ति प्रकार को खोजने के लिए निर्दिष्ट करता है, लेकिन दूसरा नहीं करता है। आपकी फ़ाइल संरचना के आधार पर, वे इसके कारण अलग-अलग परिणाम देख रहे हैं। – rutter

उत्तर

3
Resources.Load("GameObjects/Tiles/Hole") as Sprite; 

आपके संसाधन फ़ोल्डर में आपके पास "होल" है। यह अन्य-होलSprite नहीं है। इसलिए जब आप का उपयोग as Sprite यह बस एक के लिए casted नहीं किया जा सकता और एक अपवाद (है कि लाइन पर) फेंक नहीं करेगा क्योंकि:

ऑपरेटर एक डाली आपरेशन की तरह है के रूप में। हालांकि, यदि रूपांतरण संभव नहीं है, तो अपवाद बढ़ाने के बजाय रिटर्न शून्य के रूप में।


Resources.Load<Sprite>("GameObjects/Tiles/Hole"); 

आपके द्वारा निर्दिष्ट काम कर कोड है जो फ़ाइल आप चाहते हैं, Sprite में, तो यह सही पाता है।

+0

विंडोज एक्सप्लोरर में मेरे पास ** होल.png ** नामक एक फ़ाइल है, और एक अन्य जिसे ** Hole.png.meta ** कहा जाता है ** यदि मैं ** डीबग.लोग (संसाधन। लोड ("गेम ऑब्जेक्ट्स/टाइल्स/होल ")); ** तो यह ** स्प्राइट ** है और यदि मैं ** डीबग.लोग ((संसाधन। लोड (" गेम ऑब्जेक्ट्स/टाइल्स/होल "))); ** तो यह ** बनावट 2 डी ** है। तो ** ** मेटा ** फ़ाइल एक Texture2D फ़ाइल है? यूनिटी प्रोजेक्ट एक्सप्लोरर में हालांकि मेरे पास होल नामक केवल एक संसाधन फ़ाइल है। –

4

FunctionR का जवाब शायद अधिक आम जवाब है, और मैं बस यहाँ गलत हो सकता है, लेकिन मेरा मानना ​​है कि Load() और Load<T>() के बीच का अंतर मेटा डेटा के लिए कि Load<T>() चेकों है। "होल" Sprite नहीं है, यह एक छवि फ़ाइल है। Load() उस फ़ाइल फ़ाइल को पाता है और इसे फ़ाइल प्रकार के लिए डिफ़ॉल्ट प्रकार के रूप में लोड करता है, इस मामले में Texture2D

दूसरे शब्दों में, आप क्योंकि आप cast नहीं कर सकते हैं एक Texture2D एक Sprite करने के लिए as Sprite उपयोग नहीं कर सकते। आप कर सकते हैं, हालांकि,

Texture2D = Resources.Load("GameObjects/Tiles/Hole"); 
    Rect rect = {whatever}; 
    Vector2 pivot = {whatever}; 
    Sprite.Create(texture, rect, pivot); 

का उपयोग लेकिन इस Sprite आप लोड करने के लिए कोशिश कर रहे थे के आकार का पता करने की आवश्यकता है।

संक्षेप में, Load() इसे पूरी तरह से फ़ाइल प्रकार पर आधारित करता है जिसे आप लोड कर रहे हैं, Load<T>() मेटाडेटा शामिल है।