2015-04-08 14 views
6

W moim projekcie Unity mam kilka instancji klasy ArmourType (są to zasoby, obiekty skryptowalne). Próbuję pokazać je na liście rozwijanej w inspektorze, a to działa. Jednak używamJak znaleźć wszystkie zasoby danego rodzaju?

List<ArmourType> armourTypes = Resources.FindObjectsOfTypeAll<ArmourType>(); 

, aby znaleźć wszystkie te wystąpienia. To tylko znajduje obiekty, które są ładowane do pamięci, więc od czasu do czasu znajduje tylko niektóre z wymaganych zasobów. Jest to udokumentowane, więc nie jest to błąd, ale czasami bardzo denerwujące.

Moje pytanie brzmi, czy istnieje inny sposób uzyskania wszystkich tych zasobów, które zwracają te, które nie są załadowane do pamięci? A może istnieje sposób na to, by Unity ładowało zasoby, gdy są poszukiwane?

Uwaga: używam Unity5 i C#.

Odpowiedz

9

Czy tego właśnie szukasz?

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 jest Script Editor. Jeśli chcesz zrobić coś podobnego w grze, umieść odpowiednie skrypty w folderze Zasoby (upewniając się, że zostaną one uwzględnione w kompilacji, nawet jeśli nie są połączone w scenie) i używaj:

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

To się wydaje do pracy: D Wielkie dzięki! –

+2

Właśnie się dowiedziałem, że nie można tego użyć w grze. Tylko dla redaktora. Alternatywą, którą znalazłem w grze, jest 'Resources.LoadAll (" ")'. Wydaje się działać poprawnie, ale może być powolny. –

+0

Dzięki, zaktualizowałem odpowiedź, aby ułatwić czytanie. Czy to działa nawet dla skryptów w podfolderze w Zasobach? Spodziewam się, że nie, jeśli "" oznacza po prostu źródło zasobów. – Huacanacha

Powiązane problemy