前言
在保留unity原生模板的基础上,添加我们设置的脚本模板.后期的修改,维护比去修改原生模本更方便
提示:以下是本篇文章正文内容,下面案例可供参考
一、c#模板
简单点就是写一个编辑器脚本,创建一个模板的文档,最后通过替换里面的一些主要参数,来动态生成一个C#脚本,跟动态创建一个txt文档差不多.
二、使用步骤
1.思路
1.先创建一个Editor文件夹,里面的脚本智慧在编辑器下调用,不会别打包到最后的包体里面.
2.创建一个CreateScriptWindow.cs脚本,来替换模本里面的数据,创建脚本
3.创建一个MyTemplateScript.txt文档,里面存放最初的模板数据
4.下面的脚本,在unity2019.4.17里面可以直接用,理论上在unity是通用的.
2.CreateScriptWindow
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Text;
using System;
using System.Text.RegularExpressions;
/// <summary>
/// 创建脚本窗口
/// </summary>
public class CreateScriptWindow : EditorWindow
{
const string TEMPLATE_PATH = "Assets/Editor/MyTemplateScript.txt";//模板路径
[MenuItem("Tools/创建C#")]
static void Create()
{
CreateScriptWindow window = (CreateScriptWindow)GetWindow(typeof(CreateScriptWindow), false, "创建C#");
window.Show(true);
}
[MenuItem("Assets/创建C#")]
static void AssetsCreate()
{
CreateScriptWindow window = (CreateScriptWindow)GetWindow(typeof(CreateScriptWindow), false, "创建C#");
window.Show(true);
}
string _scriptName;
string _description;
void OnGUI()
{
string selectDirPath = GetPath();
//如果选中的是文件夹,则正常拼接新建脚本路径
if (Directory.Exists(selectDirPath))
{
_scriptName = EditorGUILayout.TextField("脚本名:", _scriptName);
_description = EditorGUILayout.TextField("功能描述(选填):", _description);
string path = selectDirPath + "/" + _scriptName + ".cs";
EditorGUILayout.LabelField("路径:", path);
EditorGUILayout.Space();
if (GUILayout.Button("创建", GUILayout.Height(40)))
{
//命名规则校验
if (!CheckScriptName(_scriptName))
{
ShowNotification(new GUIContent("请输入正确的脚本名!"));
}
//查重校验
else if (CheckRepeat(selectDirPath))
{
ShowNotification(new GUIContent("当前文件夹下已经有同名脚本!"));
}
//生成脚本
else
{
string content = File.ReadAllText(TEMPLATE_PATH);//从模板文件中读取内容
content = content.Replace("MyScript", _scriptName); //替换脚本名
content = content.Replace("time", DateTime.Now.ToString());//替换创建时间
content = content.Replace("ReplaceDescription", _description);//填入脚本功能描述
File.WriteAllText(path, content, Encoding.UTF8);//将修改后的内容写入新的脚本
AssetDatabase.Refresh();//马上刷新,方便在Project中直接看到新生成的脚本
ShowNotification(new GUIContent("Success!"));
}
}
}
else
{
EditorGUILayout.LabelField("请在Project面板中选择将要放置脚本的文件夹.");
}
}
/// <summary>
/// 校验脚本名(只能包含数字,字母,下划线且必须以字母或下划线开头)
/// </summary>
/// <param name="scriptName"></param>
/// <returns></returns>
bool CheckScriptName(string scriptName)
{
Regex regex = new Regex("^[a-zA-Z_][a-zA-Z0-9_]*$");
return regex.IsMatch(scriptName);
}
/// <summary>
/// 当前文件夹下脚本名重复效验
/// </summary>
/// <param name="selectDirPath"></param>
/// <returns></returns>
bool CheckRepeat(string selectDirPath)
{
DirectoryInfo dir = new DirectoryInfo(selectDirPath);
FileInfo[] files = dir.GetFiles();
string scriptName = _scriptName + ".cs";
for (int i = 0; i < files.Length; i++)
{
if (files[i].Name == scriptName)
{
return true;
}
}
return false;
}
//鼠标选中发生变化时调用
private void OnSelectionChange()
{
//重绘窗口,刷新显示
Repaint();
}
/// <summary>
/// 获取路径,如果选中文件夹以选中文件夹为主,没有选中文件夹以鼠标右键点击所在文件夹为主
/// </summary>
/// <returns></returns>
private string GetPath()
{
string assetPath = null;
if (assetPath == null || assetPath == "")
assetPath = AssetDatabase.GetAssetPath(Selection.activeInstanceID);
return assetPath;
}
}
3.MyTemplateScript.txt模板
在CreateScriptWindow里面替换掉下面的time,ReplaceDescription,MyScript三个数据.
//创建时间:time
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 功能:ReplaceDescription
/// </summary>
public class MyScript: MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
4.使用方式
1.在Project窗口下点击鼠标右键,点击创建c#的按钮,点击后填写上脚本名和注释就可以了.
总结
主要的操作在CreateScriptWindow脚本里面,注释也算详细了.