vscode调试Unity
文章目录
- vscode调试Unity
- C#
- 环境需求
- 开始调试
- Lua
- 添加Debugger
- 环境配置
- 联系.txt文件
- 配置Java环境
- 添加调试代码
- 断点不生效的问题
vscode调试Unity
C#
现在使用vscode调试Unity的C#代码很简单,直接在vscode的EXTENSIONS里面搜索“Unity”,第一个就是,然后安装它,它会自动帮你安装上C#
和C# Dev Kit
扩展,这两个扩展的作用是代码导航和编译。
环境需求
- Unity 2019 LTS或更高的版本
- 需要在vscode中激活
C# Dev Kit
扩展,安装后就是激活的 - .NET 7 SDK或更高的版本,
C# Dev Kit
会自动帮你安装 - Unity的Visual Studio Editor包需要2.0.20或更高版本
Visual Studio Code Editor
是舍弃的包,不用管。如果Visual Studio Editor
的版本小于2.0.20,可以先解锁再升级到最新的版本,下图是解锁过。
.Net Core SDK的版本检测,打开cmd,输入dotnet --list-sdks
就可以查看本机上安装的sdk的版本。
开始调试
Unity扩展添加了两个命令到vscode的命令面板(Ctrl+Shift+P打开)
-
Attach Unity Debugger
:这个命令会显示可以附加到Unity debugger的Unity Editor和Player -
Unity API Reference
: 这个命令会打开你选中的代码的Unity文档。
注意:如果你第一次运行,没有使用Attach Unity Debugger
命令选择Unity Editor和Player,直接在Run And Debug那里点击开始,会弹出出dotnot is not yet acquired
,无法成功附加,原因应该是你没有选择附加的Unity对象。执行Attach Unity Debugger
选择Unity Editor和Player之后就正常了。
Lua
Lua的调试是使用的EmmyLua
扩展。为了方便Lua的编写,以及添加断点,需要安装Lua
扩展。
添加Debugger
打开.vscode/launch.json文件,右下角有一个Add Configuration...
按钮,点击,在弹出的列表中查找,可以看到EmmyLua New Debug
,EmmyLua: Attach by process id
,EmmyLua: Attach by launch program
三个选项,这里我选的是EmmyLua New Debug
。
可以看到emmylua支持的文件扩展名也有.lua.txt
。ideConnectDebugger
默认是true,这里我将它改成了false。如果是true的话,需要先运行Unity,再在vscode开始调试;false则相反。ideConnectDebugger
从字面意思理解就是ide连接到debugger,ide是vscode,debugger是Unity。再结合上面的host
和port
字段,可以猜出emmylua和unity的连接是使用网络协议连接的,所以ide和debugger必定一个为服务单,一个为客户端。
添加debugger之后,我们可以在调试那里变成了两个选项:
Attach to Unity
是用来调试C#的;EmmyLua New Debug
是用来调试Lua的;你想调试哪个就使用哪个Debugger,不能同时调试C#和Lua。
环境配置
联系.txt文件
由于Unity不支持.lua
文件,所以lua脚本一般使用.txt
文件。但是vscode的lua又无法识别.txt
文件,所以必须将lua和.txt
文件联系起来。又为了和其他.txt
文件区分,文件后缀可以改成.lua.txt
。上面的launch.json里面EmmyLua也支持.lua.txt
的文件后缀。打开.vscode/settings.json
文件,在其中添加:
"files.associations": {"*lua.txt": "lua",},
配置Java环境
EmmyLua
需要Java环境的支持,可以直接去java的官网下载安装。安装完后需要配置JAVA_HOME
环境变量JAVA_HOME=XXX/Java/jre-1.8
,再在Path
里面添加一个路径$JAVA_HOME$/bin
。但是我这样添加环境变量后,发现EmmyLua
还是无法找到Java。后来发现EmmyLua的Settings里面有一个java.home
的变量:
这里可以看到,emmylua.java.home
的值为null
,需要将它设置为我们上面的JAVA_HOME
的值。再EmmyLua扩展的界面点击设置里面的Extension Settings
或者,打开命令面板(Ctrl+Shift+P),输出settings.json
,选择Open User Settings
打开用户的设置文件(.vscode/settings.json
是Workspace Settings
),在里面设置emmylua.java.home
的值
添加调试代码
上面已经说了,vscode和Unity一个客户端,一个服务端。如果ideConnectDebugger=true
,那么是vscode连接到Unity,Unity是服务端,vscode是客户端;false则相反。所以,我们开始运行lua的时候,需要和vscode建立连接,建立连接的API在emmy_core.dll
里面,路径是C:/Users/xxx/.vscode/extensions/tangzx.emmylua-0.5.19/debugger/emmy/windows/x64/emmy_core.dll
。所以在lua的开始我们需要加入下面的代码
local path = "C:/Users/xxx/.vscode/extensions/tangzx.emmylua-0.5.19/debugger/emmy/windows/x64/emmy_core.dll"
package.cpath = package.cpath .. ";" .. path #将emmy_core.dll的路径加入后,就可以使用require了
local dbg =require("emmy_core")
dbg.tcpConnect("localhost", 9966) #因为是ideConnectDebugger=false,vscode是服务端,使用connect;反之使用tcpListen
然后就可以开始调试了。
断点不生效的问题
按照上面完成所有操作后,你会发现连接成功了,但是断点没有生效。然后你的代码很可能是这样的(我使用的是xlua)
var luaEnv = new LuaEnv();
luaEnv.DoString(textAsset.text);
这是因为你没有指定chunkName
,emmylua不知道是哪个文件,所以断点没有生效。如果textAsset.text
是main.lua.txt
文件的内容,按照下面的修改断点就会生效了
var luaEnv = new LuaEnv();
luaEnv.DoString(textAsset.text, "main.lua.txt");
相关文章:

vscode调试Unity
文章目录 vscode调试UnityC#环境需求开始调试 Lua添加Debugger环境配置联系.txt文件配置Java环境 添加调试代码断点不生效的问题 vscode调试Unity C# 现在使用vscode调试Unity的C#代码很简单,直接在vscode的EXTENSIONS里面搜索“Unity”,第一个就是&am…...
JavaScript是如何实现页面渲染的
JavaScript实现页面渲染主要涉及到对DOM的操作、样式的修改以及与后端数据的交互。以下是JavaScript实现页面渲染的主要步骤和方式: 一、DOM操作 创建和修改元素:JavaScript可以使用document.createElement()来创建新的DOM元素,使用appendC…...

【YOLOv8 代码解读】数据增强代码梳理
1. LetterBox增强 当输入图片的尺寸和模型实际接收的尺寸可能不一致时,通常需要使用LetterBox增强技术。具体步骤是先将图片按比例缩放,将较长的边缩放到设定的尺寸以后,再将较短的边进行填充,最终短边的长度为stride的倍数即可。…...

安卓调试桥ADB
Logcat 命令行工具 | Android Studio | Android Developers 什么是ADB ADB 全称为 Android Debug Bridge ,是 Android SDK (安卓的开发工具)中的一个工具,起到调试桥的作用,是一个 客户端 - 服务器端程序 。其中 …...

深入理解数据结构第一弹——二叉树(1)——堆
前言: 在前面我们已经学习了数据结构的基础操作:顺序表和链表及其相关内容,今天我们来学一点有些难度的知识——数据结构中的二叉树,今天我们先来学习二叉树中堆的知识,这部分内容还是非常有意思的,下面我们…...

面试题:JVM的垃圾回收
一、GC概念 为了让程序员更专注于代码的实现,而不用过多的考虑内存释放的问题,所以,在Java语言中,有了自动的垃圾回收机制,也就是我们熟悉的GC(Garbage Collection)。 有了垃圾回收机制后,程序员只需要关…...

Java8之接口默认方法
Java8之接口默认方法 一、介绍二、代码1、接口2、实现类3、测试代码4、效果 一、介绍 在Java8中,允许为接口方法提供一个默认的实现。必须用default修饰符标记这样一个方法。默认方法也可以调用其他方法 二、代码 1、接口 public interface PersonService {void…...
发挥ChatGPT潜力:高效撰写学术论文技巧
ChatGPT无限次数:点击直达 发挥ChatGPT潜力:高效撰写学术论文技巧 在当今信息爆炸的时代,如何高效撰写学术论文成为许多研究者关注的焦点。而随着人工智能技术的不断发展,如何利用ChatGPT这一先进的技术工具来提升论文写作效率,成…...

国产暴雨AI服务器X3418开启多元自主可控新篇章
在当前数字化转型的大潮中,算力作为新质生产力的重要动力引擎,对推动经济社会发展起着关键作用。尤其在人工智能领域,随着高性能、安全可控的AI算力需求持续攀升,国产化服务器的研发与应用显得尤为迫切。 作为国内专业的算力基础…...
webpack-dev-server 如何直接用IP打开
当你需要使用IP来访问服务器时,可能需要对 webpack-dev-server 进行相关设置; 当你使用PD虚拟机在Windows上调试时,可能会用到; 一、设置 host 通过webpack.config.js设置 devServer: {host: 0.0.0.0, }通过CLI设置 webpack-dev-s…...
Web框架开发-BBS项目预备知识
一、简介 博客系统(cnblog) https://www.cnblogs.com/ 1.django ORM (object relation mapping 对象关系映射) 表 = 类 对象 = 记录跨表查询 分组查询 annotate() 聚合查询 aggregate(*args, **kwargs) 2.bootstrap3.Ajax (jquery javascript) --- javascript 去写…...
力扣208---实现Trie(前缀树)
题目描述: Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 请你实现 Trie 类: …...

书生·浦语大模型开源体系(一)论文精读笔记
💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...

基于单片机模糊算法温度控制系统设计
**单片机设计介绍, 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机模糊算法温度控制系统设计是一个综合性的项目,结合了单片机技术、传感器技术、模糊控制算法等多个方面。以下是对该设计的概要…...
GESP Python编程四级认证真题 2024年3月
Python 四级 2024 年 03 月 1 单选题(每题 2 分,共 30 分) 第 1 题 小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( ) A. 小程序 B. 计时器 C. 操作系统…...

Collection与数据结构 顺序表与ArrayList
1. 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在…...

pytorch | torchvision.transforms.CenterCrop
torchvision.transforms.CenterCrop>从图像中心裁剪图片 transforms.CenterCrop torchvision.transforms.CenterCrop(size) 功能:从图像中心裁剪图片 size: 所需裁剪的图片尺寸 transforms.CenterCrop(196)的效果如下: (也可…...
在Debian 11上安装GCC
GCC(GNU Compiler Collection)是一个功能强大的工具集合,可用于将不同编程语言的源代码编译成可执行文件或库。它支持多种编程语言,包括C、C、Java、Objective-C、Go、Fortran、Ada等。在Debian 11上安装GCC非常简单,以…...
kafka部署之简单密钥
一、说明 centos7.9kafka_2.13-2.7.0.tgzapache-zookeeper-3.8.0-bin.tar.gz官方文档:Apache Kafka 二、kafka配置 2.1、server.properties server.properties修改或增加如下配置 listenersSASL_PLAINTEXT://你的主机ip:9092 super.usersUser:admin authorizer…...

大模型重塑电商,淘宝、百度、京东讲出新故事
配图来自Canva可画 随着AI技术日渐成熟,大模型在各个领域的应用也越来越深入,国内互联网行业也随之进入了大模型竞赛的后半场,开始从“百模大战”转向了实际应用。大模型从通用到细分垂直领域的跨越,也让更多行业迎来了新的商机。…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...

CTF show 数学不及格
拿到题目先查一下壳,看一下信息 发现是一个ELF文件,64位的 用IDA Pro 64 打开这个文件 然后点击F5进行伪代码转换 可以看到有五个if判断,第一个argc ! 5这个判断并没有起太大作用,主要是下面四个if判断 根据题目…...