100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Unity 自定义脚本模板 添加头部注释

Unity 自定义脚本模板 添加头部注释

时间:2020-10-12 00:08:17

相关推荐

Unity 自定义脚本模板 添加头部注释

自定义模板的一些问题

其实有很多文章都写了自定义模板,添加头部注释,例如这篇文章. 都是要找到untiy 自己的模板c# txt,然后写入相关的替代码,在匹配更换,其中的问题:

当换电脑,或者unity换了一个unity版本之后,又得重新找到模板,写入无法添加多个模板

如何自定义模板

这里有两个方法 需要知道ProjectWindowUtil.CreateAssetWithContentOnWillCreateAsset,可以查查API 手册

/ScriptReference/AssetModificationProcessor.OnWillCreateAsset.html

/462/Documentation/ScriptReference/ProjectWindowUtil.html

更新10月

public class NewScriptTemplatesGenerate{/// <summary>/// 创建模板/// </summary>[MenuItem("Assets/Create/My Behaviour Script", false, 80)]static void CreateMyMonoBehaviourScrtip(){CreateNewScript("NewBehaviourScript.cs", MyBehaviourScriptTemplate);}[MenuItem("Assets/Create/My C# Script", false, 80)]static void CreateMyScrtip(){CreateNewScript("NewScript.cs", MyScriptTemplate);}private static void CreateNewScript(string sctiptName, string scriptTemplate){try{ProjectWindowUtil.CreateAssetWithContent(sctiptName, scriptTemplate, EditorGUIUtility.IconContent("cs Script Icon").image as Texture2D);}catch (Exception ex){Debug.LogError("创建错误!!! " + ex.Message);}}/// <summary>/// 给脚本添加标题头 /cn/current/ScriptReference/AssetModificationProcessor.OnWillCreateAsset.html/// </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#", panyName);scriptContent = scriptContent.Replace("#AUTHOR#", "xxx");scriptContent = scriptContent.Replace("#DESC#", "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);}}#region 脚本模板private const string MyBehaviourScriptTemplate =@"using System.Collections;using UnityEngine;/// <summary>/// ____AUTHOR: #AUTHOR#/// ____DESC:#DESC#/// </summary>public class #SCRIPTNAME# : MonoBehaviour{private void Start(){}}";private const string MyScriptTemplate =@"using System.Collections;/// <summary>/// ____AUTHOR: #AUTHOR#/// ____DESC:#DESC#/// </summary>public class #SCRIPTNAME# {public #SCRIPTNAME#(){}}";}#endregion

知道这两个方法之后就好做了

我们可以在unity中创建一个Editor文件夹,然后自定义一个 c#模板,我定义了两个,一个继承mono,一个不继承mono(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(){}}

另一个

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

然后 我们创建一个ScriptTemplatesGenerate.cs

/* 自定义 C# 模板创建* 在修改unity自定义的模板之后,换个版本,换个电脑又是原样了* 所以得自己定义一个*帮助链接*("/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);elseProjectWindowUtil.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#", panyName);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);}}}

代码已经写了注释 就不再多说,最后来看看效果

可以看到多出了两个菜单选项,然后点击创建即为自定义模板.

我在逛b战的时候发现一篇文章: /read/cv6097455

这个也可行,我们完全可以把unity自带的模板清空然后在自己的内容写入到.cs文本中,我不这么做就是字符串拼接到时候会很乱 还是自己写个模板放着,放到 自己框架 或者特定的文件夹中即可.

根据这个想法 我们也可以自定义其他模板

其实还有一种方法 ,参考一下,我是觉得稍微麻烦些,不过学点知识也好

/archives/3732

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。