前言

在游戏制作用,UI的代码架构是固定的。为了快速开发,只需要获得一个完整的UI结构代码,然后编写对应的业务逻辑即可。所以,自动化生成模板代码是一件必不可少的事情。

环境

UI的架构通常使用MVC的结构,这次就演示V的生成,其他模板的生成流程其实也大同小异。代码就不加功能了,重点放到生成代码上面去。

思路

  1. 制作模板代码,设置标志位。
  2. 生成->得到组件,遍历模板,在标志位后添加组件处理。
    更新->标志位范围的代码不保存,重新生成组件代码。
  3. 根据指定生成路径,生成代码。

View

public class TempletView
{public const string Name = "TempletView";   public GameObject m_GameObject = null;public Transform m_Transform = null; public void OnInit(GameObject root){ m_GameObject = root;m_Transform = m_GameObject.transform;InitUI();}
}private void InitUI()
{   //Start  //End
}

创建代码

StringBuilder codeStringBuilder = new StringBuilder();using(StreamReader reader  = File.OpenText(TempletViewPath)
{string lineReader = string.Empty;while ((lineReader = reader.ReadLine()) != null){if(lineReader .Contains("TempletView "){      lineReader = lineReader.replace("TempletView",prefabName);}codeStringBuilder. Append(lineReader);if(lineReader.Contains("Transform m_Transform"){for(int index = 0;index<Components.count;index++)    {     codeStringBuilder.Append($"m_{Components[index].name}_{Components[index].getType().Name} =  null;\n");} }if(lineReader.Contains("Start"){      for(int index = 0;index<Components.count;index++)    {     codeStringBuilder.Append($"m_{Components[index].name}_{Components[index].getType().Name} =  m_Transform.Find("{Components[index].name}").gameobject.GetComponent<{Components[index].getType().Name}>();\n");}  } }
}if(codeStringBuilder.Length>0)
{  StreamWriter writter = File.CreateText(UIFilePath);  writter.Write(codeStringBuilder.toString()); writter.Close();
}

更新代码

StringBuilder codeStringBuilder = new StringBuilder();using(StreamReader reader  = File.OpenText(UIFilePath)
{string lineReader = string.Empty;      bool replace =false;while ((lineReader = reader.ReadLine()) != null){if(!replace){  codeStringBuilder. Append(lineReader);}if(lineReader.Contains("Start") || lineReader.Contains("Transform m_Transform")){      replace  = true;}  if(lineReader.Contains("void OnInit")){replace = false;for(int index = 0;index<Components.count;index++)    {     codeStringBuilder.Append($"m_{Components[index].name}_{Components[index].getType().Name} =  null;\n");}               codeStringBuilder.Append("\n\n");codeStringBuilder.Append(lineReader);}if(lineReader.Contains("End"){      replace  = false;for(int index = 0;index<Components.count;index++)    {     codeStringBuilder.Append($"m_{Components[index].name}_{Components[index].getType().Name} =  m_Transform.Find("{Components[index].name}").gameobject.GetComponent<{Components[index].getType().Name}>();");} codeStringBuilder.Append(lineReader);}}}if(codeStringBuilder.Length>0)
{ StreamWriter writter = File.CreateText(UIFilePath);writter.Write(codeStringBuilder.toString());writter.Close();
}

注意点

  1. StreamWriter 打开了必须要关闭,否则该文件一直会处于使用状态。再运行就跑不了,只能重开UNITY。这也是为什么我放到最后统一搞,这样上面无论怎么崩溃都不会影响写入。
  2. File的使用要小心,看清楚是打开还是复写,否则异常中断时,文件内容可能就被清空了。。2.File的使用要小心,看清楚是打开还是复写,否则异常中断时,文件内容可能就被清空了。。
  3. 使用using命名空间,可以控制StreamReader的使用范围,免得被其他地方意外调用。
  4. 文档的更新需要依赖标志,如例子中的“Start‘和‘End’。这个标志需要是唯一的,而且不可被删除,否则就更新不了了。

【编辑器】unity自动化生成UI模板代码相关推荐

  1. unity自动化生成脚本工具

    游戏开发中有很多要重复写的代码,尤其是UI面板.所以我们可以写一个编辑器扩展自动生成脚本提高开发效率.逻辑不难代码也不算长,根据注释捋一下逻辑就可以轻松使用啦. 使用方法: 选中Project面板下的 ...

  2. Unity编辑器扩展——自动生成UI界面脚本

    一:前言 对于面板赋值或Find绑定UI组件,我们可以使用一种工具化的方式去自动生成代码并绑定对象,增加效率 分为logic和view,view层是UI界面上的组件,每次都会自动生成并覆盖,logic ...

  3. unity随机生成怪物(抽奖)代码

    我在网上发现居然找不到,都是转盘滚轮什么的抽奖,没有这种随机生成类似十连抽性质的代码 使用方法 SortedDictionary<string, int> monsterProb = ne ...

  4. 使用CSS实现简单的图片自适应UI模板代码

    HTML代码: <!DOCTYPE html> <html lang="en"> <head><meta charset="UT ...

  5. Unity 自动化1.0(代码,预制体生成到指定模块)

    代码生成参考的 知乎[Unity]工具类系列教程-- 代码自动化生成! - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/30716595 操作流程: 一,创建 ...

  6. Unity报错但VS(代码编辑器)不报错,Unity提示需要继承自MonoBehavior,Unity提示缺少命名空间或者DLL,Unity点击UI或者GameObject无法在Hierarchy锁定

    Unity一些神奇的报错包括但不限于 在2021年10月1日到2021年10月31日遇到的一些神奇的Unity的报错. 继承了MonoBehavior 但是Unity提示没有继承 问题描述:提示创建的 ...

  7. 【哪些工作会被ChatGPT取代?】我用ChatGPT全自动化生成代码进行了深度分析

    [哪些工作会被ChatGPT取代?]我用ChatGPT全自动化生成代码进行了深度分析 前言 配置好ChatGPT的几个小时之后,我发现了一个宝藏网页https://github.com/f/aweso ...

  8. Unity实验室之根据模板自动生成文件

    前言 在写代码时,会有一些需要重复写的内容,如统一的头注释,统一的框架下的风格一致的代码等,一种解决方案是把这些都放到一个模板文件夹下,每次用时就Copy一下,但这样有几个问题,一是Copy起来比较麻 ...

  9. Unity游戏文本自动化生成脚本工具-姜雪伟-专题视频课程

    Unity游戏文本自动化生成脚本工具-717人已学习 课程介绍         在游戏开发中,策划填写好配置表,程序拿到配置表后,根据配置表中的项,在代码中定义结构体,编写加载函数接口,获取数据接口, ...

最新文章

  1. 2022-2028年中国氯磺化聚乙烯橡胶行业市场深度分析及未来趋势预测报告
  2. Silverlight DataGrid超出列表高度时自动滚屏
  3. Python 处理CSV文件
  4. 2.1.6 编码与调制(2)
  5. 纯css用图片代替checkbox和radio,无js实现方法
  6. 利用flask写的接口(base64, 二进制, 上传视频流)+异步+gunicorn部署Flask服务+多gpu卡部署
  7. 7-9 集合相似度 (25 分)(交集/并集)
  8. php中的list()用法中要注意的地方
  9. 汇编语言:程序如下,编写code段中的代码,将a段和b段中的数据一次相加,结果放到c段中
  10. Hadoop报错:could only be replicated to 0 nodes, instead of 1
  11. mysql5.715 安装在d盘_MySQL-5.7.15安装步骤
  12. 高速电路常用的信号完整性测试手段与仿真
  13. 移动端图片浏览器轮子
  14. [MAC]Google Drive下载大文件
  15. ABAQUS中的文件类型及功能
  16. 关于任务计划指定错误:0X80041315、0X80070005拒绝访问
  17. 基于SSM校园学术报告管理平台毕业设计文案及源码
  18. Linux日常维护命令
  19. 在OLED12864竟然也能玩Chrome 小恐龙跳一跳的游戏?附所有软硬件资料【全开源】
  20. {:0>5d} python format占位输出

热门文章

  1. 计算机硬件系统一直延用,会计电算化计算机硬件系统
  2. XUPT—ACM周总
  3. WITH AS 用法 (说实话,WITH AS还真是简单)
  4. java.lang.NoSuchMethodError: org.springframework.http.MediaType.getCharSet()Ljava/nio/charset/Charse
  5. 【转】欧盟物联网研究战略路线图(4)
  6. 微信表情的字符编号完整版【图文并茂哦!】
  7. 解决Error creating bean with name ‘redisConnectionFactory‘ defined in class path resource...问题
  8. android客户端Netty部署SSL/TLS
  9. tensorflow 机器学习资料及其工具库
  10. html 自动加载activex控件,管理加载项未显示加载控件