本文阅读并整理自《Unity3D游戏开发》
一般修改脚本模板可以直接在unity包目录中模板文件进行修改

但是这样会出现一个问题就是,无法进行版本化管理,项目中每个人都需要手动在本地修改这个模板,无法版本管理可能会出现不一致的问题。
推荐使用如下方法:
将C# Script-MyNewBehaviourScript.cs添加到Editor/ScriptTemplates中,

在Editor文件夹中创建Script_04_01.cs
using UnityEngine;
using UnityEditor;
using System;
using System.IO;
using System.Text;
using UnityEditor.ProjectWindowCallback;
using System.Text.RegularExpressions;
public class Script_04_01
{
//脚本模板所目录
private const string MY_SCRIPT_DEFAULT = "Assets/Editor/ScriptTemplates/C# Script-MyNewBehaviourScript.cs.txt";
[MenuItem("Assets/Create/C# MyScript", false, 80)]
public static void CreatMyScript()
{
string locationPath = GetSelectedPathOrFallback();
ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0,
ScriptableObject.CreateInstance<MyDoCreateScriptAsset>(),
locationPath + "/MyNewBehaviourScript.cs",
null,MY_SCRIPT_DEFAULT);
}
public static string GetSelectedPathOrFallback()
{
string path = "Assets";
foreach (UnityEngine.Object obj in Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.Assets))
{
path = AssetDatabase.GetAssetPath(obj);
if (!string.IsNullOrEmpty(path) && File.Exists(path))
{
path = Path.GetDirectoryName(path);
break;
}
}
return path;
}
}
class MyDoCreateScriptAsset : EndNameEditAction
{
public override void Action(int instanceId, string pathName, string resourceFile)
{
UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile);
ProjectWindowUtil.ShowCreatedAsset(o);
}
internal static UnityEngine.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, "#NAME#", fileNameWithoutExtension);
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(UnityEngine.Object));
}
}

核心:CreateScriptAssetFromTemplate,拿到用户输入的名称以及文件将创建的目录,进行简单的字符串替换,再创建新的模板类。
本文介绍了如何解决Unity中脚本模板无法进行版本化管理的问题。通过将C# Script-MyNewBehaviourScript.cs模板添加到Editor/ScriptTemplates,并在Editor文件夹创建Script_04_01.cs,利用CreateScriptAssetFromTemplate方法,实现模板的自定义与版本控制,避免团队成员间模板不一致的情况。
1015

被折叠的 条评论
为什么被折叠?



