自动生成查找组件的lua代码
本篇主要解决的问题是使用lua脚本编写unity业务逻辑时,自动生成一些查找组件及绑定控件事件的lua代码!
现在很多unity项目都是用ulua作为热更新解决方案,因此需要用lua来写相关的逻辑,经常会用到的就是在lua中查找某个对象,尤其是写一些UI逻辑!
比如在Login界面中有登陆按钮、记住密码勾选框,在lua中获取这两个按钮可能的lua代码写法就是:
a1 self.loginButton = self.gameObject.transform:findChild('loginRoot/.../loginButton'):GetComponent('Button')
a2 self.rememberPasswordToggle = self.gameObject.transform:findChild('loginRoot/.../rememberPasswordToggle '):GetComponent('Toggle')
同时还需要为loginButton绑定单击事件的触发函数[类似:EventListener.Get(self.loginButton.gameObject).onClick = ...self.onClickLogin...这样的代码]
如果每次要获得某个控件都要写上上述的find路径,并绑定相应的触发函数,那么这个重复的工作量是挺大的!(正常一个不要太小型的游戏所有的界面怎么样也得有几十个吧??)
为此我写了一个自动生成上述代码文本的小工具,主要就是免除这繁琐的重复性编写无意义的代码,以及降低出错率!具体下载地址见下方连接!就3个cs文件(GenerateLua.cs、WidgetsInspector.cs、Widgets.cs),主要的代码都在widget.cs文件中(其实无非就是字符串替换,没什么特别之处,但好像我们项目组的人就懒的写这个??只好自己来了),GenerateLua.cs处理执行生成命令,WidgetsInspector.cs定制Widget类的public属性在监视器Inspector中的显示方式!(你可以在里面的OnInspectorGUI中调用基类的base.OnInspectorGUI()就知道默认显示有多恶心了!!!因此不懂自定义编辑器的童鞋也可以看看这个脚本:))
使用方法:
1.将Widgets.cs挂在场景中的Main Camera对象上(其实你也可以挂在别的对象上,自己改代码就行了),
2.然后会看到该脚本上有几个公共属性,其中FindWay枚举表示你的控件被谁查找到,默认为self.gameObject,在此选择你指定的根节点RootTrans,比如我指定login按钮由RootTrans为accountBg查找到,那么生成的代码就是
self.loginButton = self.accountBg.transform:findChild('loginRoot/.../loginButton'):GetComponent('Button')
3.将你要查找的控件拖拽到Transform框中,没错,你猜对了,就是用拖拽指定控件,然后根据指定的控件类型、绑定事件类型生成相应的ui控件查找代码以及绑定代码!
4.无误完成上述步骤之后,点击菜单栏中的GenerateLua->Generate即可在控制台console中看到打印的输出,到此就可以方便的进行拷贝粘贴代码了!!
btw,顺便说一下生成规则:
1.控件的命名是按我自己的习惯,根据选定的控件类型(比如Button),自动在控件名称后加尾缀Button,比如指定login名称后,类型为Button,绑定事件类型为OnClick,则生成的代码大致为前述的a1;
2.控件命名带空格的话生成时会自动被去除;含一些lua中不允许的非法字符则生成时会提示报错;
大致就这些,还可以继续扩展,但现在基本应用绰绰有余了!前几天手写查找代码,时不时写错,dangteng的很,现在错不了了!
2016年5月21日备注:
实际使用了几天后发现需要查找自定义类型的脚本组件,因此添加后也一并放在百度网盘了,原先的下载链接更新为下面这个链接:下载请前往百度网盘
转载请保留注明原出处:http://www.cnblogs.com/only194/p/5510755.html
自动生成查找组件的lua代码的更多相关文章
- SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码
在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...
- springboot自动生成mysql的DAO层代码
springboot提供了强大丰富的整合内容,但是每次要写一堆dao层的xml或者数据库相关的配置代码的时候,还是挺繁琐又容易出错的. 可以用mybatis-generator自动生成代码: 只需要加 ...
- csdn自动生成目录索引、插入代码片快捷键
文章目录 自动生成目录索引 插入代码片 自动生成目录索引 文章开头加入 @[TOC](目录描述) 目录描述可不写 插入代码片 cmd/ctrl + shift + k
- vite插件-自动生成vue组件文档
特点 支持热更新 快速启动,依赖于 vite,无需另起服务 自动生成组件导航 ui 采用了vant-ui的样式 核心方法覆盖率达到了 92.86% 使用 yarn add vite-plugin-vu ...
- VS2013中web项目中自动生成的ASP.NET Identity代码思考
vs2013没有再分webform.mvc.api项目,使用vs2013创建一个web项目模板选MVC,身份验证选个人用户账户.项目会生成ASP.NET Identity的一些代码.这些代码主要在Ac ...
- jeesite表字段太多导致不能自动生成那张表的代码——————jetty 之 form too large | form too many keys 异常
看了Jetty的源码才发现,jetty限制了Form提交数据的大小,该源码类来自jetty lib库下的jetty-server-7.6.16.v20140903.jar包下的 org.eclipse ...
- 组件化框架设计之apt编译时期自动生成代码&动态类加载(二)
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本篇文章将继续从以下两个内容来介绍组件化框架设计: apt编译时 ...
- 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版)
TableGo v6.0.0 版震撼发布,此次版本更新如下: 1.UI界面大改版,组件大调整,提升界面功能的可扩展性. 2.新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Jav ...
- python之gui-tkinter可视化编辑界面 自动生成代码
首先提供资源链接 http://pan.baidu.com/s/1kVLOrIn#list/path=%2F
随机推荐
- python平台跨平台开发
有助于跨平台开发的 os 模块属性: linesep 用于在文件中分隔行的字符串 sep 用来分隔文件路径名的字符串 pathsep 用于分隔文件路径的字符串 curdir 当前工作目录的字符串 ...
- leetcode72. Edit Distance(编辑距离)
以下为个人翻译方便理解 编辑距离问题是一个经典的动态规划问题.首先定义dp[i][j表示word1[0..i-1]到word2[0..j-1]的最小操作数(即编辑距离). 状态转换方程有两种情况:边界 ...
- OpenGL ES 中的模板测试
模板测试的主要功能是丢弃一部分片元,相对于深度检测来说,模板测试提出的片元数量相对较少.模板测试发生在剪裁测试之后,深度测试之前. 使用模板测试时很重要的代码提示: 1.glClear( GL_STE ...
- WebService 用法
上文详细讨论了MQ的使用方法,MQ作为一种信息存储机制,将消息存储到了队列中,这样在做分布式架构时可以考虑将消息传送到MQ服务器上,然后开发相应的服务组件获取MQ中的消息,自动获取传送的 ...
- ListView 中的ImageView Button
1.ListView 中的ImageView Button的点击事件会屏蔽掉ItemView的点击事件 原因是ImageView Button在回执过程中会抢夺item的焦点 解决办法:在xml中添 ...
- 高可用Hadoop平台-Flume NG实战图解篇
1.概述 今天补充一篇关于Flume的博客,前面在讲解高可用的Hadoop平台的时候遗漏了这篇,本篇博客为大家讲述以下内容: Flume NG简述 单点Flume NG搭建.运行 高可用Flume N ...
- python---常见的数据队列
一.FIFO队列(先进先出) #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'zhoufeng' #FIFO队列 import q ...
- jenkins发送带附件(logfile.log和index.html)的邮件配置
先进入到job里面,在Attachment中按照规矩添加文件就好了 此处是以workspace作为根目录的,logfile.log文件刚好就在根目录上,所以直接写上,多个文件的话用逗号分隔, 第二个文 ...
- SQL Server 数据库的维护(二)__触发器
--维护数据库-- --触发器-- --概述: 触发器是一种特殊类型的存储过程,用来强制执行业务规则.在调用执上,触发器不能像存储过程那样可以由用户通过T-SQL语句直接调用,而是需要有数据库所发生的 ...
- jsPlumb的简单使用
jsPlumb概述jsPlumb是一个在dom元素之间绘制连接线的javascript框架,它使用svg技术绘制连接线. 基本概念很明显,一个连线主要要解决的问题包括谁和谁连,在哪里连(连接点在哪里) ...