首页 > 解决方案 > 如何获取实现 MyClass 的 Scriptable Objects 的所有实例?

问题描述

给定 Unity 中可编写脚本对象的这个基类

public abstract class MyBaseScriptableObject<T> : ScriptableObject { }

我可以继承它

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

Foo并在编辑器中创建新的 Scriptable Objects 类型。

我想创建一个自定义编辑器窗口,其中包含所有创建的“实例”的列表,这些“实例”继承自MyBaseScriptableObject<T>. 我首先尝试MyBaseScriptableObject<string>在我的自定义编辑器窗口脚本中获取所有类型的实例

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

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

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

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

标签: c#unity3d

解决方案


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


推荐阅读