以下の内容はhttps://www.karvan1230.com/entry/2025/07/08/225159より取得しました。


【小ネタ】スクリプトテンプレートを作って作業を効率化しよう

七夕

今年の夏も織姫(or彦星)が天の河を渡って来なかった人恋しい皆さんこんにちは。異例の速さで梅雨明けして夏が始まりましたが、それで喜ぶのは陽キャとリア充だけなので梅雨と同様にこの夏も異例の速さで終了していただけるとありがたいです。

 

東京ゲームダンジョン9

以前もこのブログでお知らせしましたが8月3日に東京・浜松町で開催される東京ゲームダンジョン9に制作中のリズムゲーム「Under A Groove」を出展します。

tokyogamedungeon.com

今回の東京ゲームダンジョン9は東京都立産業貿易センターの3F/4Fの2フロアでの展示となっているのですが、我がStab of Bee Projectの出展ブースは3Fの3B-7に決まりました。

入退場口近くの場所で人の流れ的に多くの人が最初に訪れるような場所なのでお客さんの目に触れる回数は多くなりそうですが、東京ゲームダンジョンのブース配置は同じジャンル同士で纏められる傾向が強く、実際私のブース回りも「Under A Groove」と同様にリズムゲーム・音楽ゲームが多く配置されているので、それらに埋もれてしまわないように頑張りたいと思います。
(左横のブース3B-8はリズムゲームではないけど、ちょっとインパクトのあるタイトルなのでそちらにもお客さんが持っていかれそうだし・・・)

 

テンプレートを作りたい

制作するゲームも規模が大きくなってくると当然ながら作成するスクリプトの数も増えていきます。
一応、できるだけ処理のカプセル化、疎結合を意識して作成していますが、どうしても個別の処理が必要な場合はせめてI/Fは共通化しようとスクリプトに共通のインターフェースを継承させて作成するのですが、そうするとインターフェースに定義したメソッドはクラス内に必ず定義しないといけない、というお決まりがあるので、そうしたクラスを作るたびに「継承するインターフェースのメソッド全てを定義したテンプレートクラスがあれば便利なのに」と思います。

よく考えてみるとMonoBehaviourを継承したスクリプトはUnityエディタのメニューから作成され、しかも「Start()」「Update()」の関数は定義された状態で作成されているので、どこかしらにテンプレートが定義されているはず。

public class TestClass : MonoBehaviour
{
    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {
    }
}

それと同じように独自のインターフェースを継承したスクリプトのテンプレートが定義できないか調べてみました。

 

ScriptTemplatesフォルダ

スクリプトのテンプレートを定義する機能はUnityエディタのメニュー上にはありませんが、Unityエディタのフォルダ内にスクリプトのテンプレート定義を直接配置することで設定することができます。

C: > Program Files > Unity > Hub > Editor >(Uniyバージョン)> Editor > Data > Resources > ScriptTemplates

このフォルダを開くと既にいくつかスクリプトのテンプレートが定義されている事がわかります。


ここに定義したいスクリプトのテンプレート(.txtファイル)を配置します。ファイル名は以下のルールに従って定義します。

[表示優先順]-[メニュー表示名]-[ファイルデフォルト名].[ファイルの拡張子].txt

またメニューパスにおいてアンダースコアを2個使うことでメニューに階層を作ることが出来ます。
例えばテンプレートファイル名を

3-Scripting__Interface__ComPartsIF Script-NewComPartsIFScript.cs.txt

とするとUnityエディタでは右クリックで表示されたメニューの中からScriptingを選ぶと

のように表示され、設定したテンプレートファイルの定義からスクリプトを作成することができます。

 

テンプレートの定義

テンプレートには作成したいクラスのusing設定や継承元の定義、およびメソッドの定義(空メソッドで良い)を行います。
クラス名はエディタ上で書き換えるので「#SCRIPTNAME#」で定義する必要があります。
今回の場合は独自のインターフェースを継承したクラスのテンプレートなので以下のような定義としました。

public class #SCRIPTNAME# : MonoBehaviour, IComPartsInterface
{
    //-------------------------------------
    // Interface
    //-------------------------------------
    public void Init_CommonParts()
    {
        #NOTRIM#
    }
    public void Reset_CommonParts()
    {
        #NOTRIM#
    }
    public void End_CommonParts()
    {
        #NOTRIM#
    }
}

 

最後に

今回はUnityエディタのScriptTemplatesフォルダ内に定義ファイルを設置してスクリプトのテンプレートを追加しましたが、ScriptTemplatesフォルダはUnityバージョン毎に作られるので別のUnityバージョンをインストールした場合、そちらのフォルダの ScriptTemplates を再度設定しなくてはいけません。
また、当然のことながらテンプレートの定義追加は設定したPCのみに有効で、違うPCにも追加したい場合にはそのPCにも同じような処置を行う必要があります。
なのでUnityエディタのアップデートを頻繁に行ったり、GitHub等でプロジェクトを共有している場合はプロジェクト毎にテンプレートを設定することもできます。

その場合はScriptTemplates フォルダをプロジェクト内に作り、その中に先ほどのテンプレートファイルを設置してください。このプロジェクト専用のテンプレートファイルにすることができます。Unityインストール先の ScriptTemplates 同じファイル名がある場合は、このフォルダの中にあるテンプレートが優先されるようです。




以上の内容はhttps://www.karvan1230.com/entry/2025/07/08/225159より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14