vscode+unity+Emmylua调试使用教程
CSDNhttps://mp.csdn.net/mp_blog/creation/editor/125563656参考这个执行安装,
vscode安装EmmyLua插件
打开用户设置,输入encoding,勾选Auto Guess Encoding,解决中文乱码
编码格式一定要是 UTF-8
UTF-8 with BOM 格式加载不出来
lua 路径最好是在和其他lua路径一样
将emmy_core.dll 放到unity 安装的更目录
--EmmyLuaService.cs 放到Editor 文件下 在菜单栏选择 Enable
--调试时先把原来的launch.json 文件删了-- 选中--运行--启动调试,选择终端 --配置launch ,选择平台
--调试CS 选择unity Debug 调试lua 选择EmmyLua New Debug 配置launch 在一个.lua 脚本里
--启动 ctrl +shift +p 输入EmmyLua Insert Emmy Debugger Coder
--选择 x64 生成配置文件
--例如
package.cpath =
package.cpath ..
";c:/Users/Administrator.XSOOY-20190615H/.vscode/extensions/tangzx.emmylua-0.3.37/debugger/emmy/windows/x64/?.dll"
local dbg = require("emmy_core")
dbg.tcpListen("localhost", 9966)
--如果启动提示没有加载出来emmy_core 请在上述地址中找
附
using System; using System.IO; using System.Linq; using System.Net.Sockets; using System.Reflection; using System.Reflection.Emit; using System.Text; using System.Threading; using UnityEditor; using UnityEditor.Callbacks; // ReSharper disable Allnamespace EmmyLua {enum TypeKind{Class,Array,}enum Proto{Lib,Ping}[InitializeOnLoad]class EmmyLuaService{private static Socket socket;private static Thread receiveThread;private static int PORT = 996;private static bool doTryLater;private static DateTime lastTime;private static bool connected;private static bool running;private const string KEY_EMMY_SERVICE_ENABLE = "emmy.service.enable";private static bool IsEnable{get { return EditorPrefs.GetBool(KEY_EMMY_SERVICE_ENABLE); }set { EditorPrefs.SetBool(KEY_EMMY_SERVICE_ENABLE, value); }}[MenuItem("EmmyLua/Enable")]static void EnableService(){IsEnable = true;StartConnect();}[MenuItem("EmmyLua/Enable", true)]static bool EnableServiceCheck(){return !IsEnable;}[MenuItem("EmmyLua/Disable")]static void DisableService(){IsEnable = false;Stop();}[MenuItem("EmmyLua/Disable", true)]static bool DisableServiceCheck(){return IsEnable;}static EmmyLuaService(){EditorApplication.update += Update;StartConnect();}static void StartConnect(){if (running || !IsEnable)return;running = true;connected = false;doTryLater = false;try{if (socket != null)socket.Close();socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);socket.BeginConnect("127.0.0.1", PORT, OnConnect, socket);}catch (Exception e){TryLater();}}private static void OnConnect(IAsyncResult ar){try{socket.EndConnect(ar);connected = true;SendData(socket);}catch (Exception e){TryLater();}}private static void TryLater(){running = false;connected = false;doTryLater = true;lastTime = DateTime.Now;}private static void Stop(){if (running){running = false;connected = false;doTryLater = false;if (socket != null)socket.Close();}}private static void Update(){if (!IsEnable)return;var sp = DateTime.Now - lastTime;if (sp.TotalSeconds > 5){if (connected){Ping();}else if (doTryLater){StartConnect();}}}[DidReloadScripts]static void UpdateScripts(){StartConnect();}private static void WriteString(BinaryWriter writer, string value){var encoding = Encoding.UTF8;var chars = encoding.GetBytes(value);writer.Write(chars.Length);writer.Write(chars);}private static void WriteType(BinaryWriter write, Type type){if (type.IsArray){write.Write((byte) TypeKind.Array);WriteType(write, type.GetElementType());}else{write.Write((byte) TypeKind.Class);WriteString(write, type.FullName ?? "any");}}private static void Ping(){using (var buf = new MemoryStream()){var writer = new BinaryWriter(buf);writer.Write(8);writer.Write((int) Proto.Ping);try{var bytes = buf.GetBuffer();socket.Send(bytes, 8, SocketFlags.None);}catch (Exception e){TryLater();}}}private static void SendData(Socket client){var buf = new MemoryStream();var writer = new BinaryWriter(buf);writer.Seek(8, SeekOrigin.Begin);var types = GetTypes();foreach (var type in types){WriteTypeData(type, writer);}writer.Flush();// write size and protovar len = (int) buf.Length;writer.Seek(0, SeekOrigin.Begin);writer.Write(len);writer.Write((int) Proto.Lib);writer.Flush();// sendclient.Send(buf.GetBuffer(), len, SocketFlags.None);writer.Close();}private static void WriteTypeData(Type type, BinaryWriter writer){var fullName = type.FullName;if (!string.IsNullOrEmpty(fullName)){// full nameWriteString(writer, fullName);// base type full name{string baseTypeFullName = null;if (type.BaseType != null)baseTypeFullName = type.BaseType.FullName;writer.Write(baseTypeFullName != null);if (baseTypeFullName != null)WriteString(writer, baseTypeFullName);}// fieldsvar fields =type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly);writer.Write(fields.Length);foreach (var fi in fields){WriteString(writer, fi.Name);WriteType(writer, fi.FieldType);}// propertiesvar properties =type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static| BindingFlags.DeclaredOnly);writer.Write(properties.Length);foreach (var pi in properties){WriteString(writer, pi.Name);WriteType(writer, pi.PropertyType);}// methodsvar methods =(from mi in type.GetMethods(BindingFlags.Public | BindingFlags.Instance| BindingFlags.Static | BindingFlags.DeclaredOnly)where !mi.Name.StartsWith("get_") && !mi.Name.StartsWith("set_")select mi).ToArray();writer.Write(methods.Count());foreach (var mi in methods){// nameWriteString(writer, mi.Name);// is staticwriter.Write(mi.IsStatic);// parametersvar parameterInfos = mi.GetParameters();writer.Write(parameterInfos.Length);foreach (var pi in parameterInfos){WriteString(writer, pi.Name);WriteType(writer, pi.ParameterType);}// returnsWriteType(writer, mi.ReturnType);}}}private static Type[] GetTypes(){var unityTypes = from assembly in AppDomain.CurrentDomain.GetAssemblies()where !(assembly.ManifestModule is ModuleBuilder)&& assembly.FullName != "UnityEditor"from type in assembly.GetExportedTypes()where type.BaseType != typeof(MulticastDelegate)&& !type.IsInterface && !type.IsEnum//&& !type.IsGenericType//&& !type.IsGenericTypeDefinition&& !type.IsNested&& !IsExcluded(type)select type;var arr = unityTypes.ToArray();return arr;}private static bool IsExcluded(Type type){return false;}} }
vscode+unity+Emmylua调试使用教程相关推荐
- phpstudy php调试,phpStudy vscode 搭建debug调试的教程详解
下载地址 [Xdebug] zend_extension=D:/phpstudy_pro/Extensions/php/php7.3.4nts/ext/php_xdebug.dll xdebug.co ...
- 在VScode 中使用EASYX详细教程(VScode+MSVC+Easy X)
众所周知,vscode是一款强大的IDE,深受广大码友喜爱,博主曾尝试过用它实现各种脱离特定平台的写码,这里给大家介绍vscode配置EASYX的详细教程. 1.配置MSVC编译环境 首先要知道的是E ...
- Vscode,pudb远程调试服务器中的程序
Vscode远程调试服务器中的程序 VScode可以远程调试服务器中的代码,应该适合更多的人. 请参考:成功解决 vscode远程调试python 请注意第三步的时候,如果你的端口号不是默认22,就需 ...
- vscode怎么单步调试不了php,vscode如何单步调试
vscode如何单步调试? vscode单步调试 VScode配置 0.快捷键Ctrl + ` 打开默认终端; Ctrl + Shift + ` 新建新的终端; Ctrl + Shift + Y 打开 ...
- vscode断开调试服务器文件,vscode显示等待调试器断开连接
我正在尝试在vscode上调试量角器脚本. 我编辑了launch.json文件,但是调试控制台抛出了下面的错误. vscode调试控制台输出: C:\Program Files\nodejs\node ...
- Unity 2D游戏开发教程之摄像头追踪功能
Unity 2D游戏开发教程之摄像头追踪功能 上一章,我们创建了一个简单的2D游戏.此游戏中的精灵有3个状态:idle.left和right.这看起来确实很酷!但是仅有的3个状态却限制了精灵的能力,以 ...
- Unity插件-NGUI使用教程
Unity插件-NGUI使用教程 本文提供全流程,中文翻译. Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 NGUI 一款强大 ...
- Unity 2D游戏开发教程之游戏中精灵的跳跃状态
Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...
- Unity 2D游戏开发教程之为游戏场景添加多个地面
Unity 2D游戏开发教程之为游戏场景添加多个地面 为游戏场景添加多个地面 显然,只有一个地面的游戏场景太小了,根本不够精灵四处活动的.那么,本节就来介绍一种简单的方法,可以为游戏场景添加多个地面. ...
- Unity 2D游戏开发教程之精灵的死亡和重生
Unity 2D游戏开发教程之精灵的死亡和重生 精灵的死亡和重生 目前为止,游戏项目里的精灵只有Idle和Walking这两种状态.也就是说,无论精灵在游戏里做什么,它都不会进入其它的状态,如死亡.于 ...
最新文章
- java多线程系类:基础篇:10生产者消费者的问题
- Android Studio使用外部jar包
- 背完这444句英语,你的口语绝对不成问题了
- linux如何挂载U盘
- 【POJ - 1269 】Intersecting Lines (计算几何,直线间的位置关系)
- 消息中间件系列(二):Kafka的原理、基础架构、以及使用场景
- mui + php,GitHub - alphaphp/mui-kidApp: 基于 MUI 构建一个具有 90 +页面的APP应用
- C++自学13:位运算(std::bitset)
- leetcode 合并数组
- java weblogic 下载_JAVA_weblogic企业级技术 PDF 下载
- vscode安装程序员鼓励师插件
- Android-Bitmap图片优化
- mysql生成连续数字或日期
- 【R语言】ggplot2:初次见面,请多多关照!
- 多实践、少扯淡,生死看淡,不服就干
- 《指弹:千与千寻:Always with me》
- 做SEO优化第五步:定位目标关键词和长尾关键词
- 大型网站架构 图片服务器分离
- 《The One!团队》:BETA Scrum metting1
- STM32笔记——定时器输入捕获功能(测量PWM的频率和占空比)
热门文章
- fastboot刷机工具_红魔3/3S 刷机教程
- win10系统,字体及软件内容特别小(亲试有效)
- angular应用coreui框架
- JAVA打卡记录计算时间
- 大数据课程30天掌握 spark内存计算(python )-徐培成-专题视频课程
- Origin安装Could not connect to Internet Origin installation requires an Internet Connection
- Unity一键自动将多个FBX文件生成AB包+又一些小玩意
- 临时邮箱email网址收集
- Python之仓库管理系统
- creo扫描选择多条链作为轨迹_Creo与Proe可变截面扫描关系式雨伞建模实例-一加一学院...