2015-02-20 12 views
5

Ho provato a cambiare l'immagine del mio oggetto con questo codice (usato come Sprite getto):Unità Resources.Load <Sprite> vs come Sprite

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

non ha funzionato, ma questo ha funzionato (Usato < Sprite>):

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

Qual è la differenza?

+1

Nel progetto sono presenti più file denominati "Foro"? L'unico comando specifica un tipo di risorsa da cercare, ma l'altro no. A seconda della struttura del file, potrebbero cercare risultati diversi a causa di ciò. – rutter

risposta

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

Si dispone di un altro "buco" nella cartella delle risorse. Questo altro foro non è un Sprite. Pertanto, quando si utilizza as Sprite che semplicemente non può essere colata a uno e non sarà un'eccezione (su quella linea) perché:

La qualità di operatore è come un'operazione di fusione. Tuttavia, se la conversione non è possibile, restituisce null invece di generare un'eccezione.


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

Nel codice di lavoro di specificare quali file che si desidera, il Sprite, in modo che trova quella corretta.

+0

In Windows Explorer ho un file chiamato ** Hole.png **, e un altro chiamato ** Hole.png.meta ** if I ** Debug.Log (Resources.Load ("Oggetti di gioco/Piastrelle/Foro ")); ** quindi è un ** Sprite ** e se I ** Debug.Log ((Resources.Load (" GameObjects/Tiles/Hole "))); ** quindi è un ** Texture2D **. Quindi il file **. Meta ** è un file Texture2D? In Unity Project explorer, tuttavia, ho un solo file di risorse chiamato Hole. –

4

risposta di FunctionR è probabilmente la risposta più comune, e mi può solo essere sbagliato qui, ma credo che la differenza tra Load() e Load<T>() è che Load<T>() verifica la presenza di meta-dati. "Hole" non è un Sprite, è un file immagine. Load() trova il file immagine e lo carica come tipo predefinito per il tipo di file, in questo caso Texture2D.

In altre parole, non è possibile utilizzare as Sprite perché non è possibile cast un Texture2D ad un Sprite. È possibile, tuttavia, utilizzare

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

ma questo richiede di conoscere la dimensione del Sprite si stava tentando di caricare.

In sintesi, Load() lo considera basato esclusivamente sul tipo di file che si sta caricando, Load<T>() include i metadati.