c# - 如何获取实现 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,因此我的代码无法找到任何可编写脚本的对象。
有人知道这里缺少什么吗?
解决方案
您可以尝试AssetDatabase.FindAssets("t:Foo")
查找所有 Foo 对象,也可以查找所有 MyBaseScriptableObject 对象AssetDatabase.FindAssets("t:MyBaseScriptableObject")
。您无法将泛型用作类型过滤器字符串。您还可以利用文件夹,将不同的类型放在不同的文件夹中,并根据需要减少对这些文件夹的搜索。
推荐阅读
- vba - 如何查看vba中调试错误的位置?
- wordpress - 仅在父级时删除之前发布
- kubernetes - 如何验证 tekton 管道中的 helm manifest?
- jpa - JPA:带版本的复合键:如何仅选择最新版本?
- c# - EF Core 拥有的实体影子 PK 导致 SQLite 违反空约束
- r - 使用 GSIF 进行克里金回归,结果不一致
- laravel - 在 vs 代码中标记错误,在 routes/web.php 文件 laravel 8 中,未定义类型“App”。有谁知道如何解决这个问题?
- css - CDN Bootstrap 不适用于 Ruby on Rails
- javascript - 如何将具有相同值的多个 JavaScript 对象转换为一个等于这些值总和的对象?
- react-native - 尝试将 Expo 项目连接到 Expo 移动应用程序时出错