2015-02-20 3 views
5

Ich habe versucht, mit diesem Code, um das Bild meines Objekts zu ändern (als Sprit Guss verwendet):Unity Resources.Load <Sprite> vs als Sprit

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

Es hat nicht funktioniert, aber das funktionierte (gebrauchte < Sprite>):

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

Was ist der Unterschied?

+1

Haben Sie mehrere Dateien in Ihrem Projekt namens "Hole"? Der eine Befehl gibt einen zu suchenden Asset-Typ an, der andere jedoch nicht. Abhängig von Ihrer Dateistruktur sehen sie möglicherweise unterschiedliche Ergebnisse. – rutter

Antwort

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

Sie haben ein anderes "Loch" in Ihrem Resources-Ordner. Dieses andere Loch ist kein Sprite. Deshalb, wenn Sie verwenden as Sprite es einfach nicht zu einem gegossenen und wird keine Ausnahme aus (auf dieser Linie), weil:

Die als Operator wie ein Guss Betrieb ist. Wenn die Konvertierung nicht möglich ist, wird null zurückgegeben, anstatt eine Ausnahme auszulösen.


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

Im Arbeits Code, den Sie die gewünschte Datei angeben, die Sprite, so findet er die richtige.

+0

Im Windows Explorer habe ich eine Datei namens ** Hole.png ** und eine andere namens ** Hole.png.meta ** wenn ich ** Debug.Log (Resources.Load ("GameObjects/Tiles/Hole ")); ** dann ist es ein ** Sprite ** und wenn ich ** Debug.Log ((Resources.Load (" GameObjects/Tiles/Hole "))); ** dann ist es eine ** Texture2D **. Also ist die ** .meta ** Datei eine Texture2D Datei? Im Unity-Projekt-Explorer habe ich jedoch nur eine Resource-Datei namens Hole. –

4

FunctionR Antwort ist wahrscheinlich die gemeinsame Antwort, und ich kann nur hier falsch sein, aber ich glaube, der Unterschied zwischen Load() und Load<T>() ist, dass Load<T>() Kontrollen für Meta-Daten. "Loch" ist kein Sprite, es ist eine Bilddatei. Load() findet diese Bilddatei und lädt sie als Standardtyp für den Dateityp, in diesem Fall Texture2D.

Mit anderen Worten: Sie können nicht as Sprite verwenden, da kann man nicht cast ein Texture2D zu einem Sprite. Sie können jedoch bei der Verwendung

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

aber dies erfordert, dass Sie die Größe der wissen Sprite Sie laden wollten.

Zusammenfassend behandelt Load() es basiert nur auf den Dateityp, den Sie laden, enthält Load<T>() Metadaten.