csdnに関する記事を書いてから久しぶりで、自分のブログも作成しました。興味があれば、チェックしてみてください。
リンク:https://zeroultra.github.io/
トピックに戻ると、この記事ではテンプレートのカスタマイズ方法について説明しています。
カスタムテンプレートに関するいくつかの問題
実際、多くの記事では、この記事のようにカスタムテンプレートを作成し、ヘッドコメントを追加しています。これらはすべて、untiy独自のテンプレートc#txtを見つけて、関連する置換コードを記述し、それを一致で置換することです。問題:
- コンピューターが変更された場合、またはユニティバージョンが変更された場合は、テンプレートを再度見つけて書き込む必要があります
- 複数のテンプレートを追加することはできません
テンプレートをカスタマイズする方法
2つの方法があります知っている必要がありますProjectWindowUtil.CreateAssetWithContent
し、OnWillCreateAsset
APIマニュアルを見ることができます
https://docs.unity3d.com/ScriptReference/AssetModificationProcessor.OnWillCreateAsset.html
https://docs.unity3d.com/462/Documentation/ScriptReference/ProjectWindowUtil.html
これらの2つの方法を知った後、
それを行うことができます。1つのEditor
フォルダーを作成し、c#テンプレートをカスタマイズできます。2つを定義しました。1つはmonoを継承し、もう1つは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自定义的模板之后,换个版本,换个电脑又是原样了
* 所以得自己定义一个
*帮助链接
*("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);
}
}
}
コードにコメントが付けられているので、これ以上は説明しません。最後に、効果を見てみましょう。
メニューオプションがさらに2つあることがわかります。次に、[作成]をクリックしてカスタムテンプレートを作成します。
b戦争を訪れたときに記事を見つけました:https://www.bilibili.com/read/cv6097455
これも実行可能です。単一性に付属するテンプレートを完全に空にして、コンテンツの.csテキストに書き込むことができます。これを行わないと、文字列をスプライスしたり、テンプレートを作成して自分のフレームまたは特定のフォルダーに配置したりすると、面倒になります。
この考えによれば、他のテンプレートをカスタマイズすることもできます
実際、別の方法があります。参考までに、もう少し面倒だと思いますが、ある程度の知識を学ぶことをお勧めし
ますhttps://www.xuanyusong.com/archives/3732