【问题标题】:Unity Convert Object to Scriptable-ObjectUnity 将对象转换为可编写脚本的对象
【发布时间】:2021-08-05 23:39:30
【问题描述】:

如何将 Object 转换为 ScriptableObject 或者有更好的方法从 Resource 文件夹加载 Scriptable Objects?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq; 
public class ItemDatabase : MonoBehaviour
{
    public Object[] Items;
    public Item items;
 
    void Start()
    {
        Items = Resources.LoadAll("Items", typeof(Item));
 
        foreach (var t in Items)
        {
            Debug.Log(t.name);
//Convert Objects to Items
 
        }
    }
}

【问题讨论】:

    标签: c# unity3d converters


    【解决方案1】:

    一般Don't use Resources

    做起来

    public Item[] Items;
    

    将它们放在普通文件夹中并通过 Inspector 引用它们!您可以通过将它们全部选中并将它们拖到 Inspector 中的 Items name 上来一次性引用它们,这样您就不必一一添加它们。


    如果你真的想使用资源,那么要么转换

    Items = (Item[]) Resources.LoadAll("Items", typeof(Item));
    

    或者更确切地说使用通用版本

    Items = Resources.LoadAll<Item>("Items");
    

    【讨论】:

      【解决方案2】:

      删除public Object[] Items;

      Item items; 更改为Item[] items;,因为Resources.LoadAll() 返回一个对象数组,

      只需在Resources.LoadAll() 之后使用as 关键字即可转换为您想要的类型,如下所示:

      Items = Resources.LoadAll("Items", typeof(Item)) as Item[];
      

      如果转换不成功as将返回null

      【讨论】:

      • 实际上一点也不乏味.. 只需将它们全部选中并将它们拖到列表名称上 -> 全部添加到列表中,完成;)
      • 据我所知,您必须先指定列表大小,然后再一个一个地分配它们?。
      • 好吧,直到有人告诉我不,我才这么想;)只要确保将它们放在列表名称上,而不是元素插槽上 .. 有可能,尽管这只是 2020 版本 .. 没有2019 年尝试
      • 2019 年也可以使用。
      • 非常节省时间,感谢 cmets。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 2022-10-13
      • 2010-12-14
      • 1970-01-01
      • 2021-11-04
      相关资源
      最近更新 更多