【问题标题】:get prefabs from folder then converting to list<GameObject>从文件夹中获取预制件然后转换为 list<GameObject>
【发布时间】:2015-07-27 09:05:09
【问题描述】:

我想获取某个文件夹中的所有预制件,然后将其转换为列表

我的代码:

this.list = (List<GameObject>) (Resources.LoadAll<GameObject>("items")).ToList<GameObject>(); // this code not working   
this.list = AssetDatabase.LoadAllAssetsAtPath("items").ToList<GameObject>();

在最后一行我收到以下错误:

“UnityEngine.Object[]' 不包含成员 ToList 并且最佳扩展方法重载 `System.Linq.Enumerable.ToList(this System.Collections.Generic.IEnumerable)' 有一些无效参数”。

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您需要将对象转换为游戏对象,您可以尝试以下代码。 :)

    this.list = (List<GameObject>) (Resources.LoadAll<GameObject>("items")).ToList<GameObject>();
        List<object> objList;
        objList =  AssetDatabase.LoadAllAssetsAtPath("items").ToList<object>();
        List<GameObject> list2 = new List<GameObject>();
        foreach(Object item in objList)
        {
            GameObject obj = item as GameObject;
            list2.Add(obj);
        }
    

    【讨论】:

      【解决方案2】:

      ToArray() is a method that belongs to the Linq namespace。 只需将using System.Linq; 添加到您的代码中即可。

      而且,第二行代码也有问题。它返回UnityEngine.Object 的列表,您正在尝试创建GameObjects 的列表。你可以这样投射:

      var objectsArray = AssetDatabase.LoadAllAssetsAtPath("items"); this.list = new List<GameObject>(objectsArray.Cast<GameObject>());

      【讨论】:

      • 我使用 System.Linq 添加;已经;并且错误在您编辑后消失了,但现在,它总是在这段代码中给我错误:"Debug.Log(list[0].name);":"ArgumentOutOfRangeException: Argument is out of range."
      • 嗯,这是另一个错误,另一个问题。这意味着您的列表是空的,因为它正在尝试访问第一个元素并且它不存在。超出范围:即使是 0 索引也超出范围。加载方法没有找到任何预制件。尝试记录列表的大小(计数)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      相关资源
      最近更新 更多