La plantilla de secuencia de comandos personalizada de Unity agrega comentarios principales, la madre ya no tiene que preocuparse por cambiar mi computadora a la versión Unity

Ha pasado mucho tiempo desde que escribí un artículo sobre csdn, y también hice un blog propio. Si estás interesado, puedes revisarlo.
Enlace: https://zeroultra.github.io/
De vuelta al tema, este artículo habla sobre cómo personalizar la plantilla

Algunos problemas con las plantillas personalizadas

De hecho, muchos artículos han escrito plantillas personalizadas y han agregado comentarios de cabecera, como este artículo . Todos son para encontrar la propia plantilla c # txt de Untiy y luego escribir el código de reemplazo relevante y reemplazarlo en la coincidencia. Los problemas:

  1. Cuando se cambia la computadora, o se cambia la versión de la unidad, la plantilla se debe encontrar nuevamente y escribir
  2. No se pueden agregar varias plantillas

Cómo personalizar la plantilla

Hay dos métodos que debe conocer ProjectWindowUtil.CreateAssetWithContenty OnWillCreateAssetpuede consultar el manual de API
https://docs.unity3d.com/ScriptReference/AssetModificationProcessor.OnWillCreateAsset.html
https://docs.unity3d.com/462/Documentation/ScriptReference/ProjectWindowUtil.html

Después de conocer estos dos métodos,
podemos hacerlo. Podemos crear una Editorcarpeta en la unidad , y luego personalizar una plantilla de c #. Definí dos, uno hereda mono y el otro no hereda mono (archivo txt)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// --(*^__^*) --
/// ____AUTHOR:    #AUTHOR#
/// ____DATE:      #DATE#
/// ____DESC:      #DESC#
/// ____VERSION:	   #VERSION#
/// ____UNITYVERSION:  #UNITYVERSION#
/// --(=^ω^=) --
/// </summary>

public class #SCRIPTNAME# : MonoBehaviour
{
    
    
    private void Start()
    {
    
    
        
    }
}

otro

using System.Collections;
/// <summary>
/// --(*^__^*) --
/// ____AUTHOR:    #AUTHOR#
/// ____DATE:      #DATE#
/// ____DESC:      #DESC#
/// ____VERSION:	   #VERSION#
/// --(=^ω^=) --
/// </summary>

public class #SCRIPTNAME# 
{
    
    
   public  #SCRIPTNAME#()
   {
    
    
   
   }
}

Inserte la descripción de la imagen aquí
Entonces creamos unScriptTemplatesGenerate.cs

/* 自定义 C# 模板创建
 * 在修改unity自定义的模板之后,换个版本,换个电脑又是原样了
 * 所以得自己定义一个
 *帮助链接
 *("https://blog.csdn.net/mobilebbki399/article/deta
 */


using UnityEngine;
using UnityEditor;
using System;
using System.IO;

public class ScriptTemplatesGenerate
{
    
    
    //模板文件位置
    static string tempCshapeMonoBehaviourPath = Application.dataPath + "//Editor/NewBehaviourScriptTemplates.txt";
    static string tempCshapePath = Application.dataPath + "/Editor/NewScriptTemplates.txt";

    [MenuItem("Assets/Create/My C# MonoBehaviour Script", false, 80)]
    static void CreateMyMonoBehaviourCShapeScrtip()
    {
    
    

        ScriptGenerate(true);
    }
    [MenuItem("Assets/Create/My C#  Script", false, 80)]
    static void CreateMyCShapeScrtip()
    {
    
    

        ScriptGenerate(false);
 
    }

    private static void ScriptGenerate(bool isMonoBehaviour)
    {
    
    
        try
        {
    
    
            if (isMonoBehaviour)
                ProjectWindowUtil.CreateAssetWithContent("NewBehaviourScript.cs", File.ReadAllText(tempCshapeMonoBehaviourPath), EditorGUIUtility.IconContent("cs Script Icon").image as Texture2D);
            else
                ProjectWindowUtil.CreateAssetWithContent("NewScript.cs", File.ReadAllText(tempCshapePath), EditorGUIUtility.IconContent("cs Script Icon").image as Texture2D);

        }
        catch (Exception ex)
        {
    
    
            Debug.LogError("模板文件路径错误!!! " + ex.Message);
        }
    }

    /// <summary>
    /// 给脚本添加标题头
    /// </summary>
    class AddFileHeadComment : UnityEditor.AssetModificationProcessor
    {
    
    
        /// <summary>
        /// 此函数在asset被创建,文件已经生成到磁盘上,生成了.meta文件没有正式创建完成之间调用(我觉得) 和import之前被调用
        /// </summary>
        /// <param name="newFileMeta">newfilemeta 是由创建文件的path加上.meta组成的</param>
        public static void OnWillCreateAsset(string newFileMeta)
        {
    
    

            //把meta去掉
            string newFilePath = newFileMeta.Replace(".meta", "");
            //得到扩展名
            string fileExt = Path.GetExtension(newFilePath);

            if (fileExt != ".cs") return;

            string realPath = Application.dataPath.Replace("Assets", "") + newFilePath;
            string scriptContent = File.ReadAllText(realPath);

            //这里实现自定义的一些规则
            scriptContent = scriptContent.Replace("#SCRIPTNAME#", Path.GetFileName(Path.GetFileNameWithoutExtension(newFilePath)));
            //scriptContent = scriptContent.Replace("#COMPANY#", PlayerSettings.companyName);
            scriptContent = scriptContent.Replace("#AUTHOR#", "海贼王");
            scriptContent = scriptContent.Replace("#DESC#", "文件描述");
            scriptContent = scriptContent.Replace("#VERSION#", "1.0");
            scriptContent = scriptContent.Replace("#UNITYVERSION#", Application.unityVersion);
            scriptContent = scriptContent.Replace("#DATE#", DateTime.Now.ToString("yyyy-MM-dd"));

            File.WriteAllText(realPath, scriptContent);
            //一定要加这句话 不然 在创建之后点击脚本预览发现还是原来模板效果
            //一开始就是没加这句话 所以有bug 这就导致了第二个方法产生
            AssetDatabase.ImportAsset(newFilePath);
        }
    }
}

El código ha sido comentado, así que no diré más. Finalmente, echemos un vistazo al efecto.
Inserte la descripción de la imagen aquí
Puede ver que hay dos opciones de menú más, y luego haga clic en Crear para crear una plantilla personalizada.

Encontré un artículo cuando estaba visitando la guerra b: https://www.bilibili.com/read/cv6097455
Esto también es factible, podemos vaciar completamente la plantilla que viene con la unidad y escribirla en el texto .cs de nuestro contenido Si no hago esto, será complicado cuando se empalme la cadena o cuando escriba una plantilla y la coloque en mi propio marco o en una carpeta específica.

Según esta idea, también podemos personalizar otras plantillas

De hecho, hay otra forma. Como referencia, creo que es un poco más problemático, pero es mejor aprender algo de conocimiento
https://www.xuanyusong.com/archives/3732

Supongo que te gusta

Origin blog.csdn.net/K20132014/article/details/106225474
Recomendado
Clasificación