2015-04-08 16 views
6

In meinem Unity-Projekt habe ich mehrere Instanzen der Klasse ArmourType (dies sind Assets, skriptfähige Objekte). Ich versuche, diese in einer Dropdown-Liste im Inspektor zu zeigen, und das funktioniert. Ich verwende jedochWie finde ich alle Assets eines Typs?

, um alle diese Instanzen zu finden. Dies findet nur die Objekte, die in den Speicher geladen werden, so dass es gelegentlich nur einige der erforderlichen Assets findet. Dies ist dokumentiert, also kein Bug, aber manchmal sehr nervig.

Also meine Frage ist, gibt es eine andere Möglichkeit, alle diese Vermögenswerte, die diejenigen, die nicht in den Speicher geladen werden zurückgegeben werden? Oder gibt es eine Möglichkeit, Unity dazu zu bringen, die Assets zu laden, wenn sie gesucht werden?

Hinweis: Ich verwende Unity5 und C#.

Antwort

9

Ist das wonach Sie suchen?

string[] guids = AssetDatabase.FindAssets ("t:ArmourType", null); 
foreach (string guid in guids) { 
    Debug.Log (AssetDatabase.GUIDToAssetPath(guid)); 
} 

http://docs.unity3d.com/ScriptReference/AssetDatabase.FindAssets.html

AssetDatabase ist ein Editor-Skript. Wenn Sie ein ähnliches tun wollen im Spiel Platz die entsprechenden Skripte in einem Ordner Ressourcen (dies stellt sicher, werden sie in den Aufbau einbezogen werden, auch wenn nicht in der Szene verbunden sind) und verwenden:

Resources.LoadAll<ArmourType>(""); 
+0

Diese in der Tat scheint zu arbeiten: D Vielen Dank! –

+2

Ich habe gerade herausgefunden, dass Sie das nicht in einem Spiel verwenden können. Nur für den Herausgeber. Die Alternative, die ich für das Spiel gefunden habe, ist 'Resources.LoadAll (" ")'. Scheint gut zu funktionieren, könnte aber langsam sein. –

+0

Danke, ich habe die Antwort für eine einfachere Referenz aktualisiert. Funktioniert das sogar für Skripts in einem Unterordner unter Ressourcen? Ich erwarte es nicht, wenn "" nur die Ressourcenwurzel meint. – Huacanacha

Verwandte Themen