扩展 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 插件,使用的是同样的注册表:面板、命令、菜单、快捷键、设置页面和主题。


← 所有文档 编辑此页面