[{"data":1,"prerenderedAt":139},["ShallowReactive",2],{"\u002F2020-06-01-ue4-editor-helper-dev-note":3},{"id":4,"title":5,"body":6,"date":116,"description":12,"extension":117,"meta":118,"navigation":121,"path":133,"seo":134,"stem":135,"tags":136,"__hash__":138},"blogs\u002F_legacy\u002F2020\u002F2020-06-01-ue4-editor-helper-dev-note.md","UE4编辑器帮助开发记录",{"type":7,"value":8,"toc":107},"minimark",[9,13,16,20,23,29,32,43,46,52,56,59,64,67,70,73,76,79,82,85,88,92,95,101,104],[10,11,12],"p",{},"UE4的编辑器帮助类对于开发一些小功能加快开发速度挺有用的。",[10,14,15],{},"当前使用的UE4版本为4.25。",[17,18,19],"h2",{"id":19},"命令行支持",[10,21,22],{},"要支持命令行，不仅仅需要继承UCommandlet。还要注意类的命名，否则可能会无法正确的执行：",[24,25,26],"blockquote",{},[10,27,28],{},"LogInit: Error: xxxxx looked like a commandlet, but we could not find the class.",[10,30,31],{},"主要是因为命名必须采用xxxxxxCommandlet的形式，因为在FEngineLoop::PreInitPreStartupScreen中作了特殊处理",[33,34,39],"pre",{"className":35,"code":37,"language":38},[36],"language-text","if (Token.StartsWith(TEXT(\"run=\")))\n{\n    Token.RightChopInline(4, false);\n    if (!Token.EndsWith(TEXT(\"Commandlet\")))\n    {\n        Token += TEXT(\"Commandlet\");\n    }\n}\n","text",[40,41,37],"code",{"__ignoreMap":42},"",[10,44,45],{},"对于传入的参数可以使用帮助函数进行解析",[33,47,50],{"className":48,"code":49,"language":38},[36],"TArray\u003CFString> Tokens;\nTArray\u003CFString> Switches;\nTMap\u003CFString, FString> ParamVals;\n\nconst TCHAR* Parms = *Params;\nUCommandlet::ParseCommandLine(Parms, Tokens, Switches, ParamVals);\n",[40,51,49],{"__ignoreMap":42},[17,53,55],{"id":54},"console相关","Console相关",[10,57,58],{},"console对于编辑器内调试还是挺有帮助的，尤其是console var，简直调试利器，尤其是你的项目编译一次要十几分钟的时候……",[60,61,63],"h3",{"id":62},"console帮助","Console帮助",[10,65,66],{},"这个记得以前在社区有看到生成的方法，但是这次在网上搜了很久才找到方法。",[10,68,69],{},"其实很简单，在console里面输入help，就会自动在你项目目录里面生成几乎所有的console的说明文档了。还自带搜索过滤功能……",[10,71,72],{},"不过这个生成的其实不全，这次刚好用到的几个没提到的有：",[10,74,75],{},"net SOCKETS 输出所有打开的UChannel",[10,77,78],{},"net DUMPSERVERRPC 输出所有的ServerRpc",[10,80,81],{},"net NETFLOOD 发送 NMT_Netspeed 256次",[10,83,84],{},"net NETDEBUGTEXT 使用DebugText发送数据，参考NotifyControlMessage",[10,86,87],{},"net NETDISCONNECT 触发连接断开",[60,89,91],{"id":90},"添加console支持","添加Console支持",[10,93,94],{},"虽然现在编辑器有Python支持了，但是自定义的函数注册Console会比python轻快些，尤其只是一些不成体系的小帮助函数。",[33,96,99],{"className":97,"code":98,"language":38},[36],"static void _Import_Curve(const TArray\u003C FString >& InArgs);\n\nstatic FAutoConsoleCommand ImportXxxToCurve(\n    TEXT(\"aio.curvim\"),\n    TEXT(\"Import xxx to target, argument [curve asset ref] \"),\n    FConsoleCommandWithArgsDelegate::CreateStatic(&_Import_Curve),\n    ECVF_Cheat);\n",[40,100,98],{"__ignoreMap":42},[10,102,103],{},"传入的数组就是入参表。同类的还有FAutoConsoleCommandWithWorld和FAutoConsoleCommandWithOutputDevice的样子，不过没有使用过。",[10,105,106],{},"这边主要做一些自定义的资源导入导出指令，所以并不需要World呢。",{"title":42,"searchDepth":108,"depth":109,"links":110},2,3,[111,112],{"id":19,"depth":108,"text":19},{"id":54,"depth":108,"text":55,"children":113},[114,115],{"id":62,"depth":109,"text":63},{"id":90,"depth":109,"text":91},"2020-06-01","md",{"layout":119,"status":120,"published":121,"author":122,"author_login":124,"author_email":125,"wordpress_id":126,"wordpress_url":127,"date_gmt":128,"excerpt":129},"post","publish",true,{"display_name":123,"login":124,"email":125,"url":42},"风铃","flinkor","flinkor@foxmail.com",2911,"\u002F?p=2911","2020-06-01 08:09:00 +0000",{"type":7,"value":130},[131],[10,132,12],{},"\u002F2020-06-01-ue4-editor-helper-dev-note",{"title":5,"description":12},"_legacy\u002F2020\u002F2020-06-01-ue4-editor-helper-dev-note",[137],"UE4","AISPz3jz3z2Nb4LCj272Ak4Yv4QLvUuWVGfEzauJS7Y",1788763178517]