2016-07-09 1 views
1

Кто-нибудь знает, как использовать Resource.LoadAll или другой метод, подобный этому, в EditorWindow?Unity - Resources.LoadAll in EditorWindow

У меня есть эта ошибка: LoadAll can only be called from the main thread.

Общие сведения Я создаю редактор узлов, где мне нужны все элементы в моих ресурсах.

enter image description here


Это, как я использую мой статический метод:

foreach (var item in DataManager.Items.All<Food>()) 
{ 
     _foodItems.Add(item.Name); 
} 

Это мой статический метод:

internal static IEnumerable<T> All<T>() where T : BaseItem 
{ 
     return Resources.LoadAll<T>(itemsPaths[typeof (T)]); 
} 

BaseItem является публичной абстрактный класс с некоторыми общественными переменными ,

public abstract class BaseItem : Datablock 
{ 
    #region Data 

    /// <summary> 
    /// Game item name. 
    /// </summary> 
    public string Name; 

Ohhh и QuestTaskNode класс, где я хочу использовать Resources.LoadAll наследуется от ScriptableObject

+0

Все здесь неправильно. Вы не можете использовать статику вообще в Unity. Unity - это система ECS и не имеет никакого отношения к OO. Вы просто ** записываете компоненты **, которые ** прикрепляются к элементам ** GameObject. – Fattie

ответ

1

Bad:

Class BadCode{ 
    Resources.LoadAll(....); 
} 

Bad:

Class BadCode{ 
    BadCode(){ 
    Resources.LoadAll(....); 
    } 
} 

Хорошо:

Class GoodCode{ 

    void putUnityAPIInsideAFunction() 
    { 
     Resources.LoadAll(....); 
    } 
} 

Просто поместите код Unity API внутри функции. Также не помещайте его в конструктор класса, который наследует от MonoBehaviour. Вы получите ту же ошибку, потому что они не вызываются по основному Thread.

+0

Уже у меня есть статический метод: 'Внутреннее статическое IEnumerable Все (), где Т: BaseItem { возвращение Resources.LoadAll (itemsPaths [TypeOf (Т)]); } ' и я использовал это следующим образом: ' Еогеасп (VAR элемент в DataManager.Items.All ()) { _foodItems.Add (item.Name); } ' Извините, я новичок, и я не знаю, как здесь используется форматирование. –

+0

Я наследую от 'ScriptableObject'. –

+0

Измените свой вопрос и добавьте код. Также добавьте класс 'BaseItem'. Вам нужно добавить что-то, что я могу использовать, чтобы узнать, что происходит. Также не забудьте добавить язык программирования к вашему вопросу в будущем. – Programmer