当前位置: 首页 > news >正文

【Lua】XLua一键构建工具

将以下代码放入Editor文件夹,点击菜单栏的XLua/一键生成代码和热补丁 即可。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using UnityEditor;
using UnityEngine;/// <summary>
/// XLua自动化构建工具
/// </summary>
public static class XLuaAutoBuild
{// 步骤名称与可能方法名的映射表private static readonly Dictionary<string, string[]> XLuaMethods = new Dictionary<string, string[]>{{ "清除生成代码", new[] { "ClearGen", "ClearGeneratedCode", "ClearGenerateCode", "ClearGenerate", "ClearAll" } },{ "生成所有代码", new[] { "GenAll", "GenerateAll", "Generate", "GenerateCode" } },{ "热补丁注入", new[] { "HotfixInject", "InjectHotfix", "HotfixInjection", "InjectHotfix" } }};private static bool TryInvokeXLuaMethod(string stepName){// 获取所有静态公共方法var allMethods = AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => {try { return a.GetTypes(); }catch { return Enumerable.Empty<Type>(); }}).SelectMany(t => {try { return t.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); }catch { return Enumerable.Empty<MethodInfo>(); }}).Where(m => m.GetParameters().Length == 0).ToList();// 获取当前步骤的可能方法名if (!XLuaMethods.TryGetValue(stepName, out var possibleMethodNames)){Debug.LogError($"未配置步骤 '{stepName}' 的方法映射");return false;}// 查找匹配的方法var potentialMethods = new List<MethodInfo>();foreach (var method in allMethods){// 检查方法名是否在可能的方法名列表中if (possibleMethodNames.Any(name =>method.Name.Equals(name, StringComparison.OrdinalIgnoreCase))){potentialMethods.Add(method);}}if (potentialMethods.Count == 0){Debug.LogError($"未找到匹配 {stepName} 的方法。可能的方法名: {string.Join(", ", possibleMethodNames)}");return false;}// 按类型名排序,优先选择XLua命名空间中的方法var orderedMethods = potentialMethods.OrderBy(m => m.DeclaringType?.FullName?.Contains("XLua") == true ? 0 : 1).ThenBy(m => m.DeclaringType?.FullName).ToList();// 尝试所有可能的方法foreach (var method in orderedMethods){try{Debug.Log($"尝试调用: {method.DeclaringType?.FullName}.{method.Name}()");method.Invoke(null, null);Debug.Log($"{stepName} 成功: {method.DeclaringType?.FullName}.{method.Name}()");return true;}catch (Exception ex){Debug.LogWarning($"尝试 {method.Name} 失败: {ex.InnerException?.Message ?? ex.Message}");}}Debug.LogError($"所有匹配方法执行失败: {stepName}");return false;}[MenuItem("XLua/一键生成代码和热补丁", false, 0)]public static void AutoGenerateAndInject(){Debug.Log("开始 XLua 自动化构建流程...");bool success = true;// 步骤1: 清除旧代码success &= ExecuteStep("清除生成代码");// 步骤2: 生成新代码success &= ExecuteStep("生成所有代码");// 步骤3: 热补丁注入success &= ExecuteStep("热补丁注入");Debug.Log(success? "XLua 构建流程成功完成!": "XLua 构建流程遇到错误!");}private static bool ExecuteStep(string stepName){Debug.Log($"正在执行: {stepName}...");bool result = TryInvokeXLuaMethod(stepName);Debug.Log(result? $"{stepName}完成": $"{stepName}失败");return result;}
}

http://www.dtcms.com/a/321575.html

相关文章:

  • 关于 Rust 异步底层实现中 waker 的猜测
  • Xiphos 配备 GTH 计算机模块的 Q8J 低 SWaP
  • 基于LLM的Chat应用测试方法探索:系统化评估与持续优化
  • python之注册机制总结
  • 等保测评-Nginx中间件
  • 强光干扰下误报率↓82%!陌讯多模态融合算法在高空抛物检测的实战优化
  • 微软发布Project Ire项目:可自主检测恶意软件的人工智能系统
  • docker下载安装和使用(Hyper-V方式)
  • 信息系统项目范围管理高频题库精讲
  • windows拉取镜像失败
  • 双驱智造革命:物理方程+工业数据训练,突破增材制造温度场预测瓶颈
  • CETOL 6σ 帮助提升活检器械精度并降低制造成本
  • Horse3D引擎研发记录(二):基于QtOpenGL使用仿Three.js的BufferAttribute结构重构三角形绘制
  • 复数的复平面加减乘除运算与在极坐标中的运算对应关系
  • 算法训练之栈
  • provide 和 inject 最佳实践
  • 多任务实时进度监控系统:基于ABP vNext与SignalR的架构实践
  • [激光原理与应用-175]:测量仪器 - 频谱型 - 拉曼光谱仪的工作原理、内部组成、核心芯片、核心算法
  • 项目一系列-第3章 若依框架入门
  • Java中的方法引用操作符(::)详解与实战应用
  • “A flash of inspiration“, protect us from prompt injection?
  • 实习的收获
  • 【Jmeter】设置线程组运行顺序的方法
  • 安装部署K8S集群环境(实测有效版本)
  • 复杂姿态漏检率↓79%!陌讯多模态算法在安全带穿戴识别的落地实践
  • Node.js Turbo 包入门教程
  • web端-登录页面验证码的实现(springboot+vue前后端分离)超详细
  • (Arxiv-2025) CINEMA:通过基于MLLM的引导实现多主体一致性视频生成
  • 基于Jeecgboot3.8.1的flowable流程审批人与发起人相同设置-前端部分
  • Vue2与Vue3 Hooks对比:写法差异与演进思考