【问题标题】:How to fetch all instances of Scriptable Objects implementing MyClass<T>?如何获取实现 MyClass<T> 的脚本对象的所有实例?
【发布时间】:2021-07-01 06:47:58
【问题描述】:

鉴于 Unity 中可编写脚本对象的这个基类

public abstract class MyBaseScriptableObject<T> : ScriptableObject { }

我可以继承它

[CreateAssetMenu(fileName = "Foo", menuName = "My files.../Bar")]
public sealed class Foo : MyBaseScriptableObject<string> { }

并在编辑器中创建Foo 类型的新脚本对象。

我想创建一个自定义编辑器窗口,其中包含所有从MyBaseScriptableObject&lt;T&gt; 继承的已创建“实例”的列表。我首先尝试在我的自定义编辑器窗口脚本中获取 MyBaseScriptableObject&lt;string&gt; 类型的所有实例

private void ListAllInstances()
{
    string[] guids = AssetDatabase.FindAssets("t:"+ typeof(MyBaseScriptableObject<string>).Name);

    Debug.Log($"Found: {guids.Length}");
}

我创建了一个 Foo 类型的 Scriptable Object。不幸的是,计数为 0,因此我的代码无法找到任何可编写脚本的对象。

有人知道这里缺少什么吗?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您可以尝试AssetDatabase.FindAssets("t:Foo") 查找所有 Foo 对象,或者您可以查找所有 MyBaseScriptableObject 对象AssetDatabase.FindAssets("t:MyBaseScriptableObject")。您无法将泛型用作类型过滤器字符串。您还可以利用文件夹,将不同的类型放在不同的文件夹中,并根据需要减少对这些文件夹的搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多