👻
Alchemyを使ってEditorWindowをらくらく作成
はじめに
手軽にさくっとEditorWindowを作成する方法としてAlchemyが良かったのでその紹介です。
Alchemy
Alchemyはもともとエディタ拡張用のOSSプラグインとして公開されており、シンプルながら非常に高機能で拡張性が高いのが魅力です。
日本語のドキュメントも充実しています。
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)
{
}
}
このように表示されます。
楽でいいですね。[Button]
で引数に簡単に対応できるのもいいポイントです。
複雑なUIに対応するのはきついですが、簡単に作りたいならいい選択肢になると思いました。
また、変更した設定が自動的にProjectSettingsに保存されるのも便利です。
Group系のAttributeについて
AlchemyにはGroup系のAttributeも用意されておりますが、[Title]
と少し相性が悪いこともあり、自分はあまり活用していません。
おわりに
Alchemyは普通にインスペクタ拡張として極めて優秀なのでそちらの用途もオススメです。
Discussion