はじめに
Unityの開発を進めているとスクリプトのテンプレートを変更したいという場面が出てきます。
例えばデフォルトで定義されているメソッドはStartとUpdateだけですが、Awakeを追加したいとか、OnDestroyを追加したいとか、指定のusingを追加したいとか、毎回変更している内容がある場合にはテンプレートを変更しておくと便利です。
検索すると下記場所に格納されているUnityのテンプレートファイルを編集したり、追加するとかが多く出てくるのですが
“Unityのインストール先”\Editor\Data\Resources\ScriptTemplates
ここに追加してしまうと、元々多くあるテンプレートに紛れるので、そのうち自分が追加したものがどれだったか分かりづらくなりそうで、個人的には自分でメニューを追加したいなぁと思っていました。
調べたら自分でメニューを追加した上で「#SCRIPTNAME#」などの置き換えも可能なエディタ拡張を実装できるようなので、備忘として記事を残しておきます。
サンプル
これはSingleton用のテンプレートとUIScreenという自作のクラスをベースとしてたテンプレートをサンプルです。
using UnityEngine;
using UnityEditor;
using System.IO;
public class CustomClassGenerator : EditorWindow
{
[MenuItem("Assets/Create/CatHut/Scripts/SingletonMonoBehaviour")]
public static void CreateSingletonMonoBehaviour()
{
// プロジェクトウィンドウで選択されている場所のパスを取得
string selectedPath = "Assets";
Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.Assets);
if (selection.Length > 0)
{
selectedPath = AssetDatabase.GetAssetPath(selection[0]);
if (!string.IsNullOrEmpty(Path.GetExtension(selectedPath)))
{
selectedPath = Path.GetDirectoryName(selectedPath);
}
}
// ファイル名を設定してスクリプトを作成
string fileName = "NewSingletonMonoBehaviour.cs"; //デフォルトファイル名
string filePath = Path.Combine(selectedPath, fileName);
ProjectWindowUtil.CreateScriptAssetFromTemplateFile(
"Assets/CatHut/Editor/CustomClassGenerator/ClassTemplate/SingletonMonoBehaviour.cs.txt",
filePath
);
}
[MenuItem("Assets/Create/CatHut/Scripts/UIScreen")]
public static void CreateUIScreen()
{
// プロジェクトウィンドウで選択されている場所のパスを取得
string selectedPath = "Assets";
Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.Assets);
if (selection.Length > 0)
{
selectedPath = AssetDatabase.GetAssetPath(selection[0]);
if (!string.IsNullOrEmpty(Path.GetExtension(selectedPath)))
{
selectedPath = Path.GetDirectoryName(selectedPath);
}
}
// ファイル名を設定してスクリプトを作成
string fileName = "NewUIScreen.cs";
string filePath = Path.Combine(selectedPath, fileName);
ProjectWindowUtil.CreateScriptAssetFromTemplateFile(
"Assets/CatHut/Editor/CustomClassGenerator/ClassTemplate/UIScreen.cs.txt",
filePath
);
}
}
MenuItem属性を任意の階層構造に変更していただき、fileName(ファイル作成時のデフォルトファイル名)とProjectWindowUtil.CreateScriptAssetFromTemplateFileの引数でテンプレートファイル名を指定しているので、ここを変えていただければ任意のテンプレートファイルを使用したScriptが右クリックから作成できるようになると思います。
プロジェクトビューの右クリックメニューに表示するためにはMenuItemのパスが「Assets/」から始まる必要があるので、そこだけご注意ください。
また、標準のScriptTemplatesに格納する場合にはファイル名の書式の指定がありますが、こちらの場合は自分でスクリプトに書く形なので、任意のファイル名で大丈夫です。
テンプレートの書式についてはいろいろな解説サイトもあるので、割愛します。
個人的にはこちらのブログがわかりやすかったです。
さいごに
Script作る時に毎回同じ変更しとるな・・・とか思った時に、テンプレート化しておくと後々便利になると思います。
そのためにはよく使う基底クラスやインターフェースを整理したり・・・ということも必要になるのですが、これこそ小さいことからコツコツと、というところで自分も積み重ねて行きたいなぁと思います。
最後までお読みいただきありがとうございます!
誰かの役に立てば幸いです。
コメント