EmmyLua Tolua代码提示
EmmyLua 配置教程参考博文:https://blog.csdn.net/sinat_24229853/article/details/79226608
博文中代码部分修改如下:
1.在包含Tolua的项目中,在ToluaMenu.cs 中添加下列代码
[MenuItem("Lua/Gen EmmyLuaApi", false, 103)]static void GenEmmyLuaApi(){string path = "./EmmyLuaApi/";if (Directory.Exists(path)){Directory.Delete(path, true);}Directory.CreateDirectory(path);GenCustom(path);}static void GenCustom(string path){BindType[] typeList = CustomSettings.customTypeList;BindType[] list = GenBindTypes(typeList);List<Type> tlist = new List<Type>(baseType);foreach (var item in list){GenType(item.type, true, path, item);}foreach (var item in tlist){GenType(item, true, path);}}static void GenType(Type t, bool custom, string path, ToLuaMenu.BindType bindType = null){if (!CheckType(t, custom))return;//TODO System.MulticastDelegatevar sb = new StringBuilder();string className = bindType != null ? bindType.libName : t.Name;if (!CheckType(t.BaseType, custom))sb.AppendFormat("---@class {0}\n", t.Name);elsesb.AppendFormat("---@class {0} : {1}\n", t.Name, t.BaseType.Name);GenTypeField(t, sb);sb.AppendFormat("local {0}={{ }}\n", t.Name);GenTypeMehod(t, sb);sb.AppendFormat("{0}.{1} = {2}", t.Namespace, t.Name, t.Name);if (className != t.Name){sb.AppendFormat("\n{0} = {1}", className, t.Name);}File.WriteAllText(path + t.Name + ".lua", sb.ToString(), Encoding.UTF8);}static bool CheckType(Type t, bool custom){if (t == null){return false;}return !BindType.IsObsolete(t);}static void GenTypeField(Type t, StringBuilder sb){FieldInfo[] fields = t.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);foreach (var field in fields){if (field.IsDefined(typeof(NoToLuaAttribute), false))continue;sb.AppendFormat("---@field public {0} {1}\n", field.Name, GetLuaType(field.FieldType));}PropertyInfo[] properties = t.GetProperties(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);foreach (var pro in properties){if (pro.IsDefined(typeof(NoToLuaAttribute), false))continue;sb.AppendFormat("---@field public {0} {1}\n", pro.Name, GetLuaType(pro.PropertyType));}}static void GenTypeMehod(Type t, StringBuilder sb){MethodInfo[] methods = t.GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);foreach (var method in methods){if (method.IsGenericMethod)continue;if (method.IsDefined(typeof(NoToLuaAttribute), false))continue;if (method.Name.StartsWith("get_") || method.Name.StartsWith("set_"))continue;sb.AppendLine("---@public");var paramstr = new StringBuilder();foreach (var param in method.GetParameters()){sb.AppendFormat("---@param {0} {1}\n", param.Name, GetLuaType(param.ParameterType));if (paramstr.Length != 0){paramstr.Append(", ");}paramstr.Append(param.Name);}sb.AppendFormat("---@return {0}\n", method.ReturnType == null ? "void" : GetLuaType(method.ReturnType));if (method.IsStatic){sb.AppendFormat("function {0}.{1}({2}) end\n", t.Name, method.Name, paramstr);}else{sb.AppendFormat("function {0}:{1}({2}) end\n", t.Name, method.Name, paramstr);}}}static string GetLuaType(Type t){if (t.IsEnum//|| t == typeof(ulong)//|| t == typeof(long)//|| t == typeof(int)//|| t == typeof(uint)//|| t == typeof(float)|| t == typeof(double)//|| t == typeof(byte)//|| t == typeof(ushort)//|| t == typeof(short))return "number";if (t == typeof(bool))return "bool";if (t == typeof(string))return "string";if (t == typeof(void))return "void";return t.Name;}
2.点击Unity菜单栏中Lua/Gen EmmyLuaApi
3.即可生成EmmyLuaApi文件夹
EmmyLua Tolua代码提示相关推荐
- 给XLua生成Unity Api的EmmyLua代码提示
问题背景 编写Lua代码时使用Unity的Api没有代码提示影响效率,需要一个类型系统和代码提示,下面来解决这个问题 支持类型系统 Lua是动态语言,不支持声明变量类型,需要从语言外入手.有个插件叫E ...
- unity, monoDevelop ide 代码提示不起作用的解决方法
monoDevelop ide 代码提示不起作用,可能是因为ide里索引了一些不存在的文件,检查一下solution窗口里是否有文件变红,如下图中springControlEx.cs.将变红的文件re ...
- 百度搜索_如何打开Intellij IDEA的代码提示功能?
Intellij IDEA是一款优秀的编程软件,相比较Eclipse之下它的用户群较小,但并不代表它的功能就比Eclipse差,如果用顺手了还是特别好用的.代码提示功能对于程序员来说非常重要,那么我们 ...
- MyEclipse扩展功能设置(Eclipse代码提示功能)
如果是eclipse的 .提示功能没有了,照下边这样设置 window->Preferences->Java->Editor->ContentAssist->Advanc ...
- ECLIPSE远程调试出现如下问题 ECLIPSE中调试代码提示找不到源
ECLIPSE远程调试出现如下问题 ECLIPSE中调试代码提示找不到源 如此提示是由于没有JAR包中找不到MAIN,可以手动添加或自己修改 利用ECLIPSE填写JAR中的MAIN方法后,就可以调 ...
- IDEA只修改代码提示为不区分大小写
为了提高开发效率,在首字母及所有字母提示的基础上,进一步优化,IDEA支持不区分大小写的代码提示! 修改步骤如下:
- (003) java后台开发之设置Eclipse代码提示和快捷键
模块一:增强Eclipse 的代码提示功能 具体怎么样来配置?下面开始说步骤: 1. 打开Eclipse,然后"window"→"Preferences" 2. ...
- idea中properties配置文件没有代码提示及代码高亮问题解决方案
idea中properties配置文件没有代码提示及代码高亮问题解决方案 参考文章: (1)idea中properties配置文件没有代码提示及代码高亮问题解决方案 (2)https://www.cn ...
- 在PHPStorm中支持ThinkPHP代码提示
在phpstorm中开发ThinkPHP应用程序时,没有代码提示,困扰了很长时间,后来参考网上一些关于在phpstorm中支持YII框架代码提示的相关帖子,尝试在ThinkPHP中进行测试,目前测试成 ...
最新文章
- LabVIEW 三维机器人展示
- 已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。...
- 电子商务思维导图精品荟萃:电子商务思维导图大全[多图精品收藏]
- Android 开发之多线程处理、Handler 详解
- 关于ibatis.net 和 Nhibernate的选择
- springboot动态数据源切换(多数据源配置)
- python作用域的顺序_“Python”函数的参数和范围,及其,作用域
- 我们无法更新系统保留的分区_系统更新是我们手机的基本功能之一 安卓智能更新有哪些用途...
- FD.io VPP 20.09版本正式发布:往期VPP文章回顾+下载地址+相关链接
- linux下抓包工具 wireshark,网络抓包工具Wireshark的简单使用
- YAF 关闭错误异常使用trigger_error来处理
- 金蝶KIS/K3各版本下载地址
- 电脑连接Wifi,只能上QQ不能上网。关键字:无Internet访问权限。
- python调用nmap扫描全端口_python nmap 扫描服务器端口
- python大漠库_python类似大漠插件的库
- (转)开源GIS总结(一)——总结
- vue怎么改logo_vue项目添加网页logo
- 【项目管理/PMP/PMBOK第六版/新考纲】纯干货!项目经理/角色/项目经理的能力/项目经理的领导力/领导和管理/职位权力/个人权力/领导生命周期理论/仆人式领导
- 国内研发!适用于安卓应用程序的 Word文档功能开发组件来啦!
- 数据推荐 | 自然对话语音数据集