Unityの %EDITOR_PATH%\Data\Resources\ScriptTemplatesフォルダにスクリプトテンプレートファイルを置くと、プロジェクトを右クリックした時の 作成→ Scriptingから選べるテンプレートを増やすことができます。
- Unity Hubを使ってインストールしている場合の%EDITOR_PATH%(Windows)
- C:\Program Files\Unity\Hub\Editor\バージョン\Editor
私はエディタ拡張用のCustomWindow、CustomInspector、PropertyDrawerやScriptable Objectのスクリプトテンプレートなどを増やしています。
スクリプトテンプレートの追加や更新をしたい時によくフォルダの場所を忘れるので、プロジェクトウィンドウを右クリックした時のメニューにScriptTemplatesフォルダを開くメニューを追加するエディタ拡張を作成しました。
デフォルトである「エクスプローラーで表示」はUnityじゃなくてプロジェクトがある場所が開きます。
スクリプトテンプレートフォルダを開くエディタ拡張のサンプルコード
プロジェクトのAssetsフォルダ内に、Editorフォルダを作ってエディタ拡張用のスクリプトを作成します。
ファイル名はAdvancedProjectContextMenu.csとしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using UnityEditor; using System.Diagnostics; using System.IO; // プロジェクトウィンドウで右クリックした時のメニューを追加する public static class AdvancedProjectContextMenu { // テンプレートフォルダを開く [MenuItem("Assets/スクリプトテンプレートフォルダを開く", false, 15)] private static void OpenScriptTemplatesFolder() { // ScriptTemplatesフォルダのパスを取得 const string SCRIPT_TEMPLATES_FOLDER_NAME = "ScriptTemplates"; string script_templates_folder_path = EditorApplication.applicationContentsPath + "/Resources/" + SCRIPT_TEMPLATES_FOLDER_NAME; if (!Directory.Exists(script_templates_folder_path)) { EditorUtility.DisplayDialog("エラー", SCRIPT_TEMPLATES_FOLDER_NAME + "フォルダが存在しません。", "OK"); return; } // 別アプリを実行 Process.Start(new ProcessStartInfo() { FileName = script_templates_folder_path, // 関連付けられたアプリで開く(Windows / macOS どちらにも対応) UseShellExecute = true, }); } } |
パスのところを変更して増やせば、便利なショートカット集も作れそうです。
[MenuItem]属性の引数
引数 | 説明 |
---|---|
itemName | 追加するメニューの場所とメニュー名をパス形式で指定。 プロジェクトウィンドウで右クリックした時のメニューはAssets/メニュー名。 ヒエラルキーウィンドウで右クリックした時のメニューはGameObjects/メニュー名。 |
isValidateFunction | バリデート関数か。 条件によってメニューの有効・無効を切り替えたい時にtrueにし、下にbool値を返す関数を記述する。 関数の戻り値がtrueの時にメニューが有効化、falseの時にメニューが無効化される。 isValidateFunctionがfalseの時は、常にメニューが有効化する。 |
priority | メニューの優先順位。 数字が低いものほどメニューの上に表示される。 デフォルトの「作成」のpriorityは20。 |
本当は作成の下にメニューを追加したかったんですが、作成~パッケージをエクスポートまで同じ優先順位「20」が割り振られていて微調整がきかなかったです。
参考サイト
- 【Unity】 ScriptTemplates メモ書き
- 【Unity】Application.dataPath などで取得できる文字列を一覧で確認できるエディタ拡張
- MenuItemConstructor(Unity公式ドキュメント)
- 【Unity】既存メニューのpriorityを確認する方法
スポンサーリンク
スポンサーリンク