扩展 Studio
本页面为自动翻译,可能包含错误。如果发现问题,请通过“编辑此页面”链接帮助修正。
Turian Studio 是 Gaya 的插件,而 Gaya 是一个为扩展而生的平台。项目的脚本也可以扩展 Studio——使用特性,无需引用任何编辑器程序集。下面的一切都会在脚本编译时被发现,并在每次重新编译时刷新。
菜单项
带有 [MenuItem] 的 public static 方法会成为菜单命令。路径的第一段选择菜单;File、Edit、View、Project 和 Help 归入 Studio 自己的菜单,其他任何名称都会新建一个菜单:
namespace Usercode;
public static class LevelTools
{
[MenuItem("Tools/Count Scene Files")]
public static void CountScenes() =>
Log.Logger.LogInformation("{Count} 个场景", Directory.GetFiles("Assets", "*.prefab", SearchOption.AllDirectories).Length);
}
方法不带参数,或带一个参数:IServiceProvider,或 Studio 能解析的任何服务。菜单项也会出现在命令面板中,你可以在那里为它们设置快捷键。
面板
带有 [Panel] 的普通类会成为可停靠面板。它的 public 成员被绘制为表单,[Button] 方法被绘制为按钮:
namespace Usercode;
[Panel("Level Stats", "Tools/Level Stats")]
public sealed class LevelStatsPanel
{
public string Note { get; set; } = "";
public int Enemies { get; set; }
[Button]
public void Report() => Log.Logger.LogInformation("{Note}:{Enemies} 个敌人", Note, Enemies);
}
第二个参数是打开它的菜单路径(默认为 Window/<名称>)。
设置页面
带有 [EditorSetting] 的类会成为 File → Settings… 中的一个页面;它的值会被保存和恢复:
[EditorSetting("My Tools/Level Export", Description = "关卡文件的导出方式。")]
public sealed class LevelExportSettings
{
[EditorSetting("Compress", Description = "写出压缩的关卡文件。")]
public bool Compress { get; set; } = true;
public string OutputFolder { get; set; } = "Exports";
}
更多扩展点
| 特性 | 添加 | 参见 |
|---|---|---|
[CustomGizmo(drawer, component)] |
组件在 Scene 视图中的绘制 | Gizmo |
[AssetPreview(assetType)] |
某种资源类型的 Inspector 预览 | 资源预览 |
[CreateAssetMenu(path)] |
Assets 面板中数据资源的 New 条目 | 资源 |
[ComponentContextMenu(path)] |
组件在 Add Component 中的位置 | 组件 |
[Button]、[Range]、[ReadOnly]、[Hide]、… |
成员在 Inspector 中的外观 | 组件 |
Gaya 插件
Studio 的面板、菜单和命令本身就是一个 Gaya 插件(Gaya.Plugin.Turian)的贡献。要为不绑定到单个项目的工具编写单独的 Gaya 插件,使用的是同样的注册表:面板、命令、菜单、快捷键、设置页面和主题。