unity 编辑器下C#模板设置


前言

在保留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脚本里面,注释也算详细了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值