Unity下简易字符串指令调试
Unity下简易字符串指令调试
输入相应的字符串命令即可调用特定的方法,比如让角色等级提升,生成特定数量的Boss等

using System;
using UnityEngine;
using System.Collections.Generic;
using System.Reflection;
using UnityEditor;
public class GMEditor : EditorWindow
{
public string Input;
[MenuItem("Tools/GMCmd")]
static void ShowWindow()
{
GetWindow(typeof(GMEditor));
}
void OnGUI()
{
Input = GUILayout.TextField(Input, GUILayout.Height(30), GUILayout.Width(200));
if (GUILayout.Button("Submit", GUILayout.Width(100), GUILayout.Height(30)))
{
Debug.Log(GMModule.Instance.Call(Input));
}
}
}
/// <summary>
/// 指令管理模块
/// </summary>
public class GMModule
{
private static GMModule _instance;
//单例
public static GMModule Instance
{
get
{
if (_instance == null)
{
_instance = new GMModule();
_instance.Init();
}
return _instance;
}
}
/// <summary>
/// 存储命令及对应存储方法的字典
/// </summary>
private Dictionary<string, MethodInfo> m_methods = new Dictionary<string, MethodInfo>();
#region Public Methods
public void Init()
{
m_methods.Clear();
var type = typeof(GMModule);
var methods = type.GetMethods();
foreach (var each in methods)
{
var attribute = each.GetCustomAttributes(typeof(GMCommondAttribute), false);
if (attribute != null && attribute.Length > 0)
{
GMCommondAttribute gmc = attribute[0] as GMCommondAttribute;
m_methods.Add(gmc.Cmd.ToLower(), each);
}
}
}
/// <summary>
/// 执行指令
/// </summary>
public string Call(string input)
{
var tmpStr = input.ToLower().Split(' ');
var cmdStr = tmpStr[0];
if (m_methods.ContainsKey(cmdStr))
{
List<string> param = new List<string>();
for (int i = 1; i < tmpStr.Length; ++i)
{
param.Add(tmpStr[i]);
}
var method = m_methods[cmdStr];
var info = method.GetCustomAttributes(typeof(GMCommondAttribute), false)[0] as GMCommondAttribute;
if (param.Count != info.ParamNum)
{
return "Usage: " + info.Usage;
}
else
{
return m_methods[cmdStr].Invoke(this, new object[] { param.ToArray() }) as string;
}
}
else
{
return "Command Not Found!";
}
}
#region CmdMethod
[GMCommond("SpBoss", 2, "SpBoss 2 Dragon | 生成Boss")]
public string SpawnBoss(string[] args)
{
//logic to spawn Boos
return $"Spawn {int.Parse(args[0])} {args[1]}";
}
[GMCommond("userId", 0, "userId | 显示玩家ID")]
public string Help(string[] args)
{
int userId = 666;
//Query logic to get ID
return "User id is:" + userId;
}
[GMCommond("lvUp", 1, "lvUp 80 | 升级到xx ")]
public string LevelUp(string[] args)
{
//ask server to level up
return "level up to " + args[0];
}
#endregion
#endregion
}
/// <summary>
/// 指令特性,有字符串指令,参数个数,用例说明
/// </summary>
[AttributeUsage(AttributeTargets.Method)]
public class GMCommondAttribute : Attribute
{
public string Cmd;
public int ParamNum;
public string Usage;
public GMCommondAttribute(string cmd, int paramNum, string usage)
{
Cmd = cmd;
ParamNum = paramNum;
Usage = usage;
}
}
有点像 字节码模式的简化版
Unity下简易字符串指令调试的更多相关文章
- Win8/Win7系统下用IE11浏览器调试js脚本
作为一个web开发者,调试js脚本是工作中的一部分,但是并不是所有的浏览器都会很好的兼容js脚本的.随着win8系统的发布,ie11也慢慢进入了大家的视野,ie11的众多优点及新特性就不必多说了(全面 ...
- [转] linux下的c/c++调试器gdb
PS:1. 断点C++类函数,用b 命名空间::类名::方法名 2. 编译参数一定要加-g,才可断点调试 http://www.cnblogs.com/xd502djj/archive/2012/08 ...
- 解决ubuntu unity下gvim菜单消失的问题
#问题描述:在终端下用gvim 指令打开 gvim就不显示菜单.在不启用unity的桌面环境下用终端打开gvim是有菜单的.从程序菜单中打开gvim是显示菜单的.用sudo打开gvim也可以显示菜单, ...
- Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果
Unity 3D 简易制作摄像机围绕物体随鼠标旋转效果 梗概: 一. 摄像机围绕目标物体旋转, 即摄像机离目标物体有一定的距离且旋转轴心为该物体的位置. 二. 当目标物体被障碍物挡住后, 需要将摄像机 ...
- linux下的c/c++调试器gdb
Reference: http://www.cnblogs.com/xd502djj/archive/2012/08/30/2663960.html linux下的c/c++调试器gdb gdbLi ...
- Unity消息简易框架 Advanced C# messenger
Unity消息简易框架 Advanced C# messenger Unity C# 消息机制 [转载 雨凇MOMO博客] https://www.xuanyusong.com/archives/2 ...
- Unity下的开发框架--适应web和微端游戏异步资源请求的框架
一. 内容简介: 1. 框架对Web与微端游戏特性的支持: Web和微端游戏最重要的特性是,资源是持续从服务器上即时下载下来的.而保证体验流畅的关键就是保证资源下载分散到持续的体验过程中,并保 ...
- LyScript 获取上一条与下一条指令
LyScript 插件默认并没有提供上一条与下一条汇编指令的获取功能,当然你可以使用LyScriptTools工具包直接调用内置命令得到,不过这种方式显然在效率上并不理想,我们需要在LyScript插 ...
- 使用B或BL跳转时,下一条指令的地址是这样计算的
B跳转指令:它是个相对跳转指令,其机器码格式如下: [31:28]位是条件码:[27:24]位为“1010”(0xeaffffff)时,表示B跳转指令,为“1011”时,表示BL跳转指令:[23:0] ...
- Windows内核下操作字符串!
* Windows内核下操作字符串! */ #include <ntddk.h> #include <ntstrsafe.h> #define BUFFER_SIZE 1024 ...
随机推荐
- 划重点|iOS15正式发布, 全新的通知推送系统,你必须要知道!
简介: 今年友盟+联合达摩院决策智能实验室讲算法技术,推出国内首个智能推送功能,帮助产品运营人员实现一键式触达的精细化运营.通过精心打磨的在线学习与优化算法,对推送人群与推送文案进行精准匹配,最大化 ...
- [GPT] Unable to negotiate with xx.xx.xx.xx port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
这个错误通常发生在 SSH 客户端无法找到与 SSH服务器 匹配的主机密钥类型时. 这可能是因为SSH服务器配置为使用SSH客户端不支持的主机密钥类型. 要解决此问题,您需要将缺少的主机密钥类型添 ...
- WPF 应用启动过程同时启动多个 UI 线程且访问 ContentPresenter 可能让多个 UI 线程互等
在应用启动过程里,除了主 UI 线程之外,如果还多启动了新的 UI 线程,且此新的 UI 线程碰到 ContentPresenter 类型,那么将可能存在让新的 UI 线程和主 UI 线程互等.这是多 ...
- 2019-4-29-Roslyn-将这个文件放在你的项目文件夹,无论哪个控制台项目都会输出林德熙是逗比...
title author date CreateTime categories Roslyn 将这个文件放在你的项目文件夹,无论哪个控制台项目都会输出林德熙是逗比 lindexi 2019-4-29 ...
- 利用MOS管构成基本的数字逻辑门
欢迎各位朋友关注"郝旭帅电子设计团队",本微信公众号会定时更新相关技术类资料.软件等等,希望各位朋友都能在本微信公众号获得一些自己想要的"东西". 非门原理图中 ...
- 纯css高斯背景模糊(毛玻璃,伪元素,完整实例)
先上效果图: 写博客不管是做笔记还是干啥,直接上源码不行么,还不放效果图,拆分成几段谁慢慢看,慢慢理解去 自己动手,丰衣足食,上代码: <!DOCTYPE HTML> <html l ...
- Oracle细粒度审计策略
场景:经常需要查看某些表做了哪些操作. Oracle中,可以添加细粒度策略来获取,如下: begin dbms_fga.add_policy(object_schema => 'portxx', ...
- 开源电子邮件营销平台 listmonk 使用教程
做产品肯定要做电子邮件营销,特别是面向海外的产品,电子邮件营销已成为企业与客户沟通.建立品牌忠诚度和推动销售的重要工具,可以直接接触到目标受众,提供个性化内容,并以相对较低的成本获得可观的投资回报.你 ...
- 文件上传--php user.ini详解
文件上传 参考文档:https://www.php.net/manual/zh/configuration.file.per-user.php 如果你的 PHP 以模块化运行在 Apache 里,则用 ...
- HDU 多校 2023 Round #6 题解
HDU 多校 2023 Round #6 题解 \(\text{By DaiRuiChen007}\) A. Count Problem Link 题目大意 求有多少个长度为 \(n\),字符集大小为 ...