Unity Editor编辑器扩展之创建脚本

news2024/11/16 23:36:46

前言

        既然你看到这篇文章了,你是否也有需要使用代码创建脚本的需求?使用编辑器扩展工具根据不同的表格或者新增的内容去创建你想要的脚本。如果不使用工具,那么你只能不断去修改某个脚本,这项工作既繁琐也浪费时间。这个时候作为程序员的我们就要自己写一个工具节省时间了,那么恰好unity editor可以帮助我们实现这个工具,接下来往下看👇

准备工作

        这里我打算用一个excel表格作为我需要经常更新内容。比如:我们在做本地登录时,有很多种错误码需要接入进来,但是这个错误码经常根据产品需求频繁的更新,手动改的话既繁琐又浪费时间还极容易改错,怎么解决呢?继续往下看👇

核心代码

        动态创建脚本就是这两个非常简单且经常使用的api,具体怎么使用,接着往下看👇

StringBuilder sb = new StringBuilder();
//写入文件
File.WriteAllText(filePath, fileContent);

        第一步:加载excel数据

/// <summary>
        /// 读取excel表格code码
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        static Dictionary<string, string> ReadExcelFile(string path)
        {
            Dictionary<string, string> datas = new Dictionary<string, string>();
            // StreamingAssets目录下的文件的路径
            FileStream fileStream = File.Open(path, FileMode.Open, FileAccess.Read);
            IExcelDataReader excelDataReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);
            // 表格数据全部读取到result里
            DataSet result = excelDataReader.AsDataSet();
            // 获取表格有多少列 
            int colums = result.Tables[0].Columns.Count;
            // 获取表格有多少行
            int rows = result.Tables[0].Rows.Count;

            for (int i = 1; i < rows; i++)
            {
                if (string.IsNullOrEmpty(result.Tables[0].Rows[i][0].ToString())) continue;

                datas.Add(result.Tables[0].Rows[i][0].ToString(), result.Tables[0].Rows[i][1].ToString());
            }

            return datas;
        }

        第二步:格式化类内容

/// <summary>
        /// 生成静态类
        /// </summary>
        /// <param name="className"></param>
        /// <returns></returns>
        private static string GenerateStaticClassContent(string className)
        {
            var datas = ReadExcelFile(Application.streamingAssetsPath + "/UserMgrCode.xlsx");

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("using System;");
            sb.AppendLine("");

            sb.AppendLine("public class CommonCode");
            sb.AppendLine("{");
            sb.AppendLine("    public int code;");
            sb.AppendLine("    public string value;");
            sb.AppendLine("}");
            sb.AppendLine("");

            sb.AppendLine("/// <summary>");
            sb.AppendLine("/// CodeEngine错误码管理引擎");
            sb.AppendLine("/// <summary>");
            sb.AppendLine("public static class " + className);
            sb.AppendLine("{");
            foreach (var item in datas)
            {
                sb.AppendLine("    /// <summary>");
                sb.AppendLine($"    /// 错误码{item.Key}");
                sb.AppendLine("    /// <summary>");
                sb.AppendLine("    public static CommonCode P_" + (item.Key) + "= new CommonCode(){code = " +
                              (item.Key) + $", value = \"{item.Value}\"}};");
                sb.AppendLine("");
            }

            sb.AppendLine("}");

            return sb.ToString();
        }

        第三步:写入文件,生成脚本

//写入文件
File.WriteAllText(filePath, fileContent);

结果

sing System;

public class CommonCode
{
    public int code;
    public string value;
}

/// <summary>
/// CodeEngine错误码管理引擎
/// <summary>
public static class CodeEngine
{
    /// <summary>
    /// 错误码401000
    /// <summary>
    public static CommonCode P_401000= new CommonCode(){code = 401000, value = "用户名或者密码为空,无法登录!"};

    /// <summary>
    /// 错误码401001
    /// <summary>
    public static CommonCode P_401001= new CommonCode(){code = 401001, value = "用户名不存在,请联系管理员!"};

    /// <summary>
    /// 错误码401002
    /// <summary>
    public static CommonCode P_401002= new CommonCode(){code = 401002, value = "密码错误,请重试!"};

    /// <summary>
    /// 错误码401003
    /// <summary>
    public static CommonCode P_401003= new CommonCode(){code = 401003, value = "输入不能为空,请重新输入!"};

    /// <summary>
    /// 错误码401004
    /// <summary>
    public static CommonCode P_401004= new CommonCode(){code = 401004, value = "用户名重复,请重新输入!"};

    /// <summary>
    /// 错误码401005
    /// <summary>
    public static CommonCode P_401005= new CommonCode(){code = 401005, value = "输入不能为空!"};

    /// <summary>
    /// 错误码401006
    /// <summary>
    public static CommonCode P_401006= new CommonCode(){code = 401006, value = "新密码不能为原始密码!"};

    /// <summary>
    /// 错误码401007
    /// <summary>
    public static CommonCode P_401007= new CommonCode(){code = 401007, value = "新密码和确认密码不一致,请重新输入!"};

    /// <summary>
    /// 错误码401008
    /// <summary>
    public static CommonCode P_401008= new CommonCode(){code = 401008, value = "新设置的密码长度不符合要求,请重新输入!"};

    /// <summary>
    /// 错误码401009
    /// <summary>
    public static CommonCode P_401009= new CommonCode(){code = 401009, value = "密码包含特殊字符,请重新输入!"};

    /// <summary>
    /// 错误码401010
    /// <summary>
    public static CommonCode P_401010= new CommonCode(){code = 401010, value = "用户添加失败!"};

}

Editor使用方法

        [MenuItem("模拟维修/生成LoginCode码")]
        public static void CreateUserCode()
        {
            string className = "CodeEngine";
            string filePath = $"Assets/Scripts/SimulateEngine/{className}.cs";
            string fileContent = GenerateStaticClassContent(className);

            //创建目录
            Directory.CreateDirectory(Path.GetDirectoryName(filePath));

            //写入文件
            File.WriteAllText(filePath, fileContent);

            //刷新编辑器
            AssetDatabase.Refresh();
        }

Editor编辑器扩展之创建脚本ok了,点下赞和关注,就赶紧去试试吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1611089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Electron+Vue3整合 - 开发时状态整合

说明 本文介绍一下 Electron Vue3 的整合的基本操作。实现的效果是 &#xff1a; 1、一个正常的Vue3项目&#xff1b; 2、整合加入 Electron 框架 &#xff1a;开发时 Electron 加载的是开发的vue项目&#xff1b;步骤一&#xff1a;创建vue3项目 常规操作&#xff0c;不再赘…

盲人购物指南:智能化辅助引领超市购物新体验

作为一名资深记者&#xff0c;我有幸见证了一位盲人朋友借助一款名为蝙蝠避障的高科技辅助应用&#xff0c;独立完成超市购物之旅&#xff0c;这一过程充分展示了盲人购物指南新时代的到来。 在前往超市的路上&#xff0c;这款应用犹如一位贴心的“电子向导”&#xff0c;实时为…

Vue【路由】

1&#xff1a;什么是单页应用程序&#xff08;single page application&#xff09; 所有得功能在一个html页面上实现 2&#xff1a;单页面应用程序的优缺点 优点&#xff1a;按需更新性能高&#xff0c;开发效率也高&#xff0c;用户的体验较好 缺点&#xff1a;学习成本高…

学习-官方文档编辑方法

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

高效编程工具 JetBrains CLion 2024 中文激活 mac/win

在追求编程高效与精准的道路上&#xff0c;JetBrains CLion 2024 for Mac无疑是您的最佳伙伴。这款专为Mac用户打造的C/C集成开发环境&#xff0c;凭借其强大的功能和出色的性能&#xff0c;赢得了广大开发者的青睐。 CLion 2024拥有智能的代码编辑器和强大的代码分析工具&…

超越GPT-4V,苹果多模态大模型上新,神经形态计算加速MLLM(一)

4月8日&#xff0c;苹果发布了其最新的多模态大语言模型&#xff08;MLLM &#xff09;——Ferret-UI&#xff0c;能够更有效地理解和与屏幕信息进行交互&#xff0c;在所有基本UI任务上都超过了GPT-4V&#xff01; 苹果开发的多模态模型Ferret-UI增强了对屏幕的理解和交互&am…

解锁棋盘之谜:探索N皇后问题的全方位解决策略【python 力扣51题】

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 python数据分析…

【Qt 学习笔记】Qt常用控件 | 显示类控件Label的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 显示类控件Label的使用及说明 文章编号&#xff1a;Qt 学…

AOP基础-动态代理

文章目录 1.动态代理1.需求分析2.动态代理的核心3.代码实例1.Vehicle.java2.Car.java3.Ship.java4.VehicleProxyProvider.java(动态代理模板)5.测试使用 2.动态代理深入—横切关注点1.需求分析2.四个横切关注点3.代码实例1.Cal.java2.CalImpl.java3.VehicleProxyProvider02.jav…

iOS重签名-超详细,附排错

文章目录 重签名步骤步骤 1: 准备必要的材料步骤 2: 解压 .ipa 文件步骤3:将 Provisioning Profile 复制到 Payload 目录步骤 4: 移除原来的签名步骤 5: 使用新的证书和 Provisioning Profile 进行重签名步骤 6: 重新打包 .ipa 文件步骤 7: 安装和测试得到provisioning file和…

语音转换中的扩散模型——DDDM-VC

DDDM-VC: Decoupled Denoising Diffusion Models with Disentangled Representation and Prior Mixup for Verifed Robust Voice Conversion https://ojs.aaai.org/index.php/AAAI/article/view/29740https://ojs.aaai.org/index.php/AAAI/article/view/29740 1.概述 首先,语…

力扣HOT100 - 142. 环形链表 II

解题思路&#xff1a; public class Solution {public ListNode detectCycle(ListNode head) {Set<ListNode> set new HashSet<>();while (head ! null) {if (!set.add(head)) {return head;}head head.next;}return null;} }

findImg找图工具

findImg 安装 npm install findImg -g 启动 findImg run 介绍 找出当前目录下的所有图片&#xff08;包括svg的symbol格式&#xff09;在浏览器中显示出来 源码 https://github.com/HuXin957/find-img 场景 例如前端项目中的img目录&#xff0c;大家都在往里面放图片&#xff…

k8s 控制器StatefulSet原理解析

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、k8s概述 2、有状态服务和无状态服务…

(自学用)正演理论

基于波动方程如何解决数值频散问题——快速正演方法 NAD方法&#xff1a; 怎样离散/逼近高阶偏导数&#xff08;如何采样&#xff09;&#xff1a; 传统方法是用某一点及其周围点的函数f的线性组合来逼近导数。只有函数值&#xff0c;要想提高精度&#xff0c;压制数值频散就必…

与助听器相关的职业主要有哪些?

助听装置是目前解决听觉障碍的几乎唯一科学的方法。然而助听装置改变的不是听力&#xff0c;而是外界的声音信息。也就是助听装置只能将外界的声音信息改变成能够适应听觉障碍患者听觉动态范围的声音。显然助听器并不知道听觉障碍患者的听觉动态范围是多少&#xff1f;也不知道…

PyTorch and Stable Diffusion on FreeBSD

Stable Diffusion在图像生成领域具有广泛的应用和显著的优势。它利用深度学习和扩散模型的原理&#xff0c;能够从随机噪声中生成高质量的图像。 官网&#xff1a;GitHub - verm/freebsd-stable-diffusion: Stable Diffusion on FreeBSD with CUDA support FreeBSD下难度主要…

数据输入输出流(I/O)

文章目录 前言一、数据输入输出流是什么&#xff1f;二、使用方法 1.DataInputStream类2.DataOutoutStream类3.实操展示总结 前言 数据输入输出流也是将文件输入输出流打包后使用的对象。相比于文件输入输出流&#xff0c;数据输入输出流提供了简单易用的方法去操作不同类型的数…

【系统架构师】-案例考点(一)

1、软件架构设计 主要考点&#xff1a; 质量属性、软件架构风格、软件架构评估、MVC架构、面向服务的SOA架构、 DSSA、ABSD 1.1、质量属性 1、性能:指系统的响应能力&#xff0c;即要经过多长时间才能对某个事件做出响应&#xff0c;或者在某段时间内系统所能处理的事件的…

不同版本vue安装vue-router

vue-router 是vue官网发布的一个插件库&#xff0c;单页面路由。vue 和 vue-router 之间版本也需要对应。 vue2.x版本使用vue-router3.x版本&#xff0c;vue3.x使用vue-router4.x版本&#xff0c;根据自己的需要选择合适的版本 1、可以在安装前查看vue-router版本&#xff0c;…