【Unity初心者向け】はじめてのエディタ拡張
はじめに
こんにちは。
本記事では、UnityのEditor拡張の中でもかなり基礎的な部分を紹介します。
Unityを触り始めた方が、開発への手札を増やす目的で読んでいただければ幸いです。
自分自身が学生の頃に欲しかった情報をまとめたものとなりますので、これをヒントにエディタ拡張への第一歩を踏み出していただけるとありがたいです。
本記事で紹介する機能を以下に列挙します。
- MenuItem
- ContextMenu
- SettingsProvider
MenuItem
Unityのタブ部分に機能を追加することが出来ます。
Unity公式リファレンス - MenuItem
コードはこんな感じ
using UnityEngine;
using UnityEditor;
public class MenuItemExtension
{
[MenuItem("MyMenuItem/Function01")]
private static void Function()
{
Debug.Log("
");
}
}
ポイントは、以下の三点です。
-
static
メソッド- インスタンスに紐付かない関数にします。
-
MenuItem
の引数に作成するメニューの名前を指定できる- ここでは
Function01
がメニューの名前になります。
- ここでは
- メニュー名の指定には一つ以上の階層を掘る
-
MenuItem
というタブの中に作成します。 - 階層を作成しない場合はUnity側からエラーが出ます。
-
他にも、以下のような使い方もできます。
既存のタブに追加
先ほどのコードではMyMenuItem
というタブの中に機能を作成しましたが、既存のWindow
やAssets
の中にも自作の機能を作成することが出来ます。
Priorityの設定
機能の順番を指定することが出来ます。
MenuItem
の引数にPriority
を渡します。
[MenuItem("MyMenuItem/Function01", priority = 11)]
0 ~ 10 / 11 ~ 20 / 21 ~ 30 ... のように10区切りで仕切り線が引かれるので整理整頓にも使えます。
その他の機能
- ショートカットキーの設定
- Unityの各所にタブ、機能を追加
- ProjectビューのCreateのメニュー
- Projectビューの右クリックメニュー
- コンポーネントのメニュー
- この機能は次の項目の
ContextMenu
でも似たようなことが出来ます。 - こちらは、Unityの基礎クラスである、RigidBodyやBoxColliderにもメニュー追加することができます。
- この機能は次の項目の
ContextMenu
コンポーネントの三点メニューに自作機能を追加することが出来ます。
[Unity公式リファレンス - ContextMenu]
コードはこんな感じ
using UnityEngine;
public class ContextMenuExtension : MonoBehaviour
{
[ContextMenu("MyContextMenu")]
private void Function()
{
Debug.Log("hello world...");
}
}
ポイントは、以下の三点です。
- コンポーネントに紐づいているので
MonoBehavior
を継承している必要がある -
static
メソッドである必要はない -
MenuItem
と同様で階層を作成することもできる
基本的な使い方はMenuItem
と同様です。
しかし、こちらはインスタンスに紐づいたメソッドを呼び出すことが出来るので、Transform
からPosition
へアクセスしたり、RigidBody
のvelocity
にアクセスすることが出来ます。
SettingsProvider
Editor > ProjectSettings... や、 Editor > Preference... に自作のメニューを追加することが出来ます。
コードはこんな感じ
using UnityEditor;
public class SettingsProviderExtension
{
[SettingsProvider]
private static SettingsProvider Create()
{
return new SettingsProvider("MySetting/", SettingsScope.Project)
{
label = "MySettingFunction",
guiHandler = searchtext => EditorGUILayout.LabelField("TestMessage")
};
}
}
ポイントは、以下の三点です。
-
[SettingsProvider]
を指定 -
SettingsProvider
のコンストラクタに、タブ名とProjectかUserを指定- Projectを指定するとProjectSettings = プロジェクトに紐づいた設定
- Userを指定するとPreference = ユーザーに紐づいた設定
- guiHandlerに描画したい設定項目を入れる
こちらは、先の2点よりも少し難しい内容になりますが、Unityの設定画面の部分に追加することが出来るので使用用途は多岐にわたります。
最初は、こんなものあるんだ程度で覚えておくと後々役立つと思います。
おわりに
自分が学生の頃に知りたかった内容をテーマにまとめてみました。
紹介した機能を深掘ることで「できること」が徐々に増えていくかと思います。
あくまでエディタ拡張ってこういうことができるんだ~、というゆる~い視点で捉えていただけるとありがたいです!
ではまた。
Discussion