原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

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

七夕

今年の夏も織姫(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 同じファイル名がある場合は、このフォルダの中にあるテンプレートが優先されるようです。

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。