Studio の拡張

このページは自動翻訳されており、誤りが含まれる場合があります。誤りを見つけた場合は「このページを編集」リンクからご協力ください。

Turian Studio は、拡張されるために作られたプラットフォーム 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);
}

メソッドは引数なし、または 1 つ(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);
}

2 番目の引数はそれを開くメニューパスです(既定は 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 ビュー描画 ギズモ
[AssetPreview(assetType)] アセットタイプの Inspector プレビュー アセットプレビュー
[CreateAssetMenu(path)] データアセット用の Assets パネルの New 項目 アセット
[ComponentContextMenu(path)] Add Component 内でのコンポーネントの位置 コンポーネント
[Button]、[Range]、[ReadOnly]、[Hide]、… Inspector でのメンバーの見え方 コンポーネント

Gaya プラグイン

Studio のパネル、メニュー、コマンドは、それ自体が Gaya プラグイン(Gaya.Plugin.Turian)の提供するものです。1 つのプロジェクトに縛られないツール向けに別の Gaya プラグインを書く場合も、同じレジストリ(パネル、コマンド、メニュー、ショートカット、設定ページ、テーマ)を使います。


← すべてのドキュメント このページを編集