👻

Alchemyを使ってEditorWindowをらくらく作成

2025/02/06に公開

はじめに

手軽にさくっとEditorWindowを作成する方法としてAlchemyが良かったのでその紹介です。

Alchemy

https://github.com/AnnulusGames/Alchemy

Alchemyはもともとエディタ拡張用のOSSプラグインとして公開されており、シンプルながら非常に高機能で拡張性が高いのが魅力です。
日本語のドキュメントも充実しています。

https://annulusgames.github.io/Alchemy/articles/ja/about.html

EditorWindowの作成

Alchemyを使ってEditorWindowを作成する際は、以下のようなコードを書くだけで作成できます。

using Alchemy.Editor;
using UnityEditor;

class EditorWindowAlchemySample : AlchemyEditorWindow
{
    [MenuItem("EditorWindowAlchemySample")]
    static void Open()
    {
        var window = GetWindow<EditorWindowAlchemySample>();
        window.Show();
    }
}

要するにAlchemyEditorWindowを継承したクラスを用意するだけです。

あとはAttributeを利用して、インスペクタを拡張していく要領で書いていきます。

using Alchemy.Editor;
using Alchemy.Inspector;
using UnityEditor;
using UnityEngine;

class EditorWindowAlchemySample : AlchemyEditorWindow
{
    [MenuItem("EditorWindowAlchemySample")]
    static void Open()
    {
        var window = GetWindow<EditorWindowAlchemySample>();
        window.Show();
    }

    [Title("TimeScale")]
    [SerializeField]
    [OnValueChanged("OnTimeScaleChanged")]
    [Range(0f, 10f)]
    float _timeScale = 1f;

    void OnTimeScaleChanged(float value)
    {
        Time.timeScale = value;
    }

    [Button]
    void TimeScaleを1にもどす()
    {
        _timeScale = 1f;
    }

    [Title("フォルダ移動ショートカット")]
    [Button] //[HorizontalGroup("Folder")]
    void Sounds()
    {
    }

    [Button]
    void Prefabs()
    {
    }

    [Button]
    void Sprites()
    {
    }

    [Title("シーン移動ショートカット")]
    [Button]
    void Title()
    {
    }

    [Button]
    void InGame()
    {
    }

    [Button]
    void Result()
    {
    }

    [Title("その他")]
    [Button]
    void 指定レベルからプレイ(int level)
    {
    }
}

このように表示されます。

EditorWindowの表示結果
楽でいいですね。[Button]で引数に簡単に対応できるのもいいポイントです。

複雑なUIに対応するのはきついですが、簡単に作りたいならいい選択肢になると思いました。

また、変更した設定が自動的にProjectSettingsに保存されるのも便利です。

Group系のAttributeについて

AlchemyにはGroup系のAttributeも用意されておりますが、[Title]と少し相性が悪いこともあり、自分はあまり活用していません。

おわりに

Alchemyは普通にインスペクタ拡張として極めて優秀なのでそちらの用途もオススメです。

Discussion