KENTEM TechBlog

建設業のDXを実現するKENTEMの技術ブログです。

【Unity6】スクリプトのテンプレートを自作する方法(1/2)

Unityでの開発をしていると、自分のプロジェクトに合ったテンプレートが欲しいときがあります。

本記事ではUnity上でスクリプトのテンプレートを自作する方法のうち、「.cs.txt」ファイルを用いた作り方とそのメリット・デメリットの比較について記載します。

本記事を作成しようと考えた理由は下記のとおりです。

  • テンプレートを自作する記事はいくつか見られたものの、メリット・デメリットを検討した記事が見られなかったため

  • 現在最新であるUnity6で実施された記事がなく、試行錯誤したため

はじめに

Unity Editorではテンプレートとなる雛形を指定してファイルを作成すると、そのテンプレートを基にファイルが生成されます。

一例としてMonobehaviour Scriptを取り上げます。

①のフォルダやファイルが並んでいる場所で右クリックをした後、②Create、③Scripting、④Monobehaviour Scriptの順に選択すると、下記のようなC#ファイルが生成されます。

※ 下記の例にあるようにテンプレートにnamespaceを含める場合はAssembly-Definitionの設定が必要です。

bluebirdofoz.hatenablog.com

using UnityEngine;

namespace SampleAssembly
{
    public class SampleScript : 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()
        {
        
        }
    }
}

開発を進めていく上で所属するプロジェクトに適した良いテンプレートを作れるのではないかと考えました。

例えばUpdateを使っていないのであれば削除したり、毎回using文で何らかのライブラリを参照しているのであればそれを追記した独自のテンプレートを作りたい場合が挙げられます。

テンプレートの作成方法には複数ありますが、今回はそのうち2つの方法を取り上げ、それぞれのメリットとデメリットを考えます。

方法1: Unity Editorに直接テンプレートを作成する

Unity Editorから提供されている雛形と同じ保存形式でテンプレートを作成してみます。

テンプレートの保管場所

Unity6で開発している場合、先ほどのテンプレートは下記のディレクトリに保存されています。このディレクトリをターミナルで開きます。

  • Macの場合/Applications/Unity/Hub/Editor/(Unity Editorのバージョン名)/Unity.app/Contents/Resources/ScriptTemplates/
  • Windowsの場合 C:\Program Files\Unity\Hub\Editor\(Unity Editorのバージョン名)\Editor\Data\Resources\ScriptTemplates\

※「(Unity Editorのバージョン名)」と記載がある箇所は、「6000.0.32f1」など、各自が用いているUnity Editorのバージョンを記載してください。

※ Unity6より前の場合は保存場所が異なる場合があります。下記をご覧ください。

support.unity.com

テンプレートの中身紹介

このディレクトリをVSCodeで開くと、次のような「.cs.txt」という拡張子のファイルが複数保存されているフォルダ構成になっていることがわかります。

1-Scripting__MonoBehaviour Script-NewMonoBehaviourScript.cs.txtというファイルには下記のような内容が書かれています。

using UnityEngine;

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

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

生成されたファイルと比較してみると、#ROOTNAMESPACEBEGIN#がAssembly Definitionで定義されたnamespaceに、#SCRIPTNAME#がファイル名に置き換わっていることがわかります。

また、1-Scripting__MonoBehaviour Script-NewMonoBehaviourScript.cs.txtという名前はUnity Editorの下記箇所にそれぞれ対応しています。

これを真似すれば下記のようにMyCustomScriptを作成できます。

この方法のメリットとデメリットを考えると次の通りとなります。

  • メリット
    • Unity Editorのテンプレートから少し改変するだけで独自のテンプレートが作成できる
    • Unity Editorのバージョンが同じであればプロジェクトを兼任していても用いられる
  • デメリット
    • Unity Editorのバージョンが変われば再度同じ手順を行う必要がある
    • Unity Editorを直接書き換えることになるので抵抗がある
    • Gitで管理されないので他人と共有できない
    • クラス名やnamespace名は自動で埋め込むことができるが、それ以外は固定の文字列しか埋め込めない

方法2: Assets/ScriptTemplatesに「.cs.txt」ファイルを保存する

Assetsの直下にScriptTemplatesというフォルダを作成し、その直下に先ほどと同じく拡張子が「.cs.txt」というファイルを保存することでも同様の結果が得られます。

この方法のメリットとデメリットを考えると次の通りになります。

  • メリット
    • Gitで管理され他人と共有できる
    • Unity Editorのバージョンが変わっても問題なく使用できる
    • Unity Editorの設定に直接書き込むわけではないのであまり抵抗なく作業できる
  • デメリット
    • クラス名やnamespace名は自動で埋め込むことができるが、それ以外は固定の文字列しか埋め込めない

方法1と比べて多くの課題が解決できましたが、固定の文字列しか埋め込めない問題があります。

この課題を解決するにはEditor拡張を用いる必要があります。

おわりに

KENTEMでは、様々な拠点でエンジニアを大募集しています! 建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。 recruit.kentem.jp career.kentem.jp