2016-07-09 1 views
1

誰でも、このようなResources.LoadAllや他のメソッドをEditorWindowで使用する方法を知っていますか?Unity - EditorWindowのResources.LoadAll

私はそのエラー: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は、いくつかのパブリック変数を持つパブリック抽象クラスであります。

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

悪い:私はScriptableObject

+0

ここではすべてが間違っています。あなたはUnityで静的を使用することはできません。 UnityはECSシステムであり、OOとの接続は全くありません。あなたは** ** "GameObject"アイテムに**添付されている**を書くだけです。 – Fattie

答えて

1

悪いからResources.LoadAll継承を使いたい

public abstract class BaseItem : Datablock 
{ 
    #region Data 

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

あーとQuestTaskNodeクラス

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

グッド:

Class GoodCode{ 

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

Unity APIコードを関数内に入れてください。それをMonoBehaviourから継承するクラスコンストラクタに入れないでください。メインのThreadで呼び出されないため、同じエラーが発生します。

+0

はすでに私は、静的メソッドを持っている: '内部静的IEnumerableをすべて()ここで、T:BaseItem {リターンResources.LoadAll (itemsPaths [typeof演算(T)])。 } 'と私はこのようにそれを使用する: {_foodItems.Add(item.Name)(DataManager.Items.All ()におけるVAR項目)'のforeach。 } ' 申し訳ありませんが、私は新しく、ここではどのように丁寧なフォーマットの使用がわかりません。 –

+0

私は 'ScriptableObject'を継承しています。 –

+0

質問を編集し、そこにコードを追加してください。 'BaseItem'クラスも追加してください。何が起こっているのかを知るために使うことができるものを追加する必要があります。あなたの質問に将来的にプログラミング言語を追加してください。 – Programmer