Unity エディター - カスタム スクリプト テンプレート

Unity エディター - カスタム スクリプト テンプレート

Unityエディター用のスクリプトテンプレート

Unity エディターのスクリプト テンプレート フォルダーに独自のテンプレートを追加します。エディターを再起動すると、自動的に認識され、 Assets/Create (プロジェクトの右クリック メニュー)に利用可能なテンプレートが表示されます。
注: カスタム テンプレートを追加した後、有効にするためにエディタを再起動する必要があります。
テンプレート ファイルの場所: エディターのインストール場所\Editor\Data\Resources\ScriptTemplates
テンプレートファイルの場所
テンプレート ファイルの命名形式の説明: (81-Script__MonoBehaviour-NewBehaviour.cs.txt を例にします)

81 脚本 モノビヘイビア NewBehavior.cs
メニューの場所 メニュー名 (__ で区切ることができ、複数レベルのサブメニュー) オプション名 デフォルトのファイル名

テンプレート内の一般的なキーワードの説明:

#ルートネームスペースの開始# #ルートネームスペースEND# #スクリプト名# #名前#
スクリプトのルート名前空間をマークします。 スクリプトのルート名前空間をマークします。 ファイル名 (C# スクリプトはデフォルトでファイル名をクラス名に設定します) ファイル名 (シェーダーはデフォルトでファイル名をシェーダー名に設定します)

スクリプト テンプレートをエディターのインストール場所 \Editor\Data\Resources\ScriptTemplatesに直接配置する場合、エディターをアップグレードするときに、新しくインストールされたエディターに対して上記の操作を繰り返す必要があります。このために、スクリプト テンプレートを直接配置できます (同じ命名規則を持つ ) は、Assets/ScriptTemplates フォルダーに保存されます。Unity エディターを再起動すると、エディターがそれを自動的に認識し、右クリック メニューに表示します。その後、Assets/ScriptTemplates フォルダーを .unitypackage にエクスポートして使用します。他のプロジェクトでも。

メニュー項目

まず、スクリプト テンプレート ScriptTemplate.cs.txt を準備し、Assets/ScriptTemplatesフォルダーに配置します。

/*
┌────────────────────────────┐
│ Description:
│ Author:
│ Remark:可在自定义的脚本模板中按自身需求添加版权信息、脚本说明等
└────────────────────────────┘
┌──────────────┐                                   
│ ClassName:#SCRIPTNAME#
└──────────────┘
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

    #ROOTNAMESPACEBEGIN#
public class #SCRIPTNAME# : MonoBehaviour
{
    
    

}
#ROOTNAMESPACEEND#

エディター スクリプト CreateMyScript.cs を Assets/Scripts/Editor フォルダーに追加します

using System.IO;
using System.Text.RegularExpressions;
using System.Text;
using UnityEditor;
using UnityEditor.ProjectWindowCallback;
using UnityEngine;

public static class CreateScript
{
    
    
    [MenuItem("Assets/Create/My Script", false, 80)]
    public static void CreatNewLua()
    {
    
    
        ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0,
        ScriptableObject.CreateInstance<CreateScriptAsset>(),
        GetSelectedPathOrFallback() + "/NewScript.cs",
        null,
       "Assets/ScriptTemplates/ScriptTemplate.cs.txt");
    }

    public static string GetSelectedPathOrFallback()
    {
    
    
        string path = "Assets";
        foreach (Object obj in Selection.GetFiltered(typeof(Object), SelectionMode.Assets))
        {
    
    
            path = AssetDatabase.GetAssetPath(obj);
            if (!string.IsNullOrEmpty(path) && File.Exists(path))
            {
    
    
                path = Path.GetDirectoryName(path);
                break;
            }
        }
        return path;
    }

    class CreateScriptAsset : EndNameEditAction
    {
    
    
        public override void Action(int instanceId, string pathName, string resourceFile)
        {
    
    
            UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile);
            ProjectWindowUtil.ShowCreatedAsset(o);
        }

        internal static Object CreateScriptAssetFromTemplate(string pathName, string resourceFile)
        {
    
    
            string fullPath = Path.GetFullPath(pathName);
            StreamReader streamReader = new StreamReader(resourceFile);
            string text = streamReader.ReadToEnd();
            streamReader.Close();
            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName);
            text = Regex.Replace(text, "#SCRIPTNAME#", fileNameWithoutExtension);
            text = Regex.Replace(text, "#ROOTNAMESPACEBEGIN#", string.Empty);
            text = Regex.Replace(text, "#ROOTNAMESPACEEND#", string.Empty);
            bool encoderShouldEmitUTF8Identifier = true;
            bool throwOnInvalidBytes = false;
            UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);
            bool append = false;
            StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding);
            streamWriter.Write(text);
            streamWriter.Close();
            AssetDatabase.ImportAsset(pathName);
            return AssetDatabase.LoadAssetAtPath(pathName, typeof(Object));
        }
    }
}

参考文献

https://www.xuanyusong.com/archives/3732
https://github.com/hubertgdev/unity-script-templates

おすすめ

転載: blog.csdn.net/weixin_43430402/article/details/128803195