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

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 DebugEmmyLua: Attach by process idEmmyLua: Attach by launch program三个选项,这里我选的是EmmyLua New Debug

在这里插入图片描述

可以看到emmylua支持的文件扩展名也有.lua.txtideConnectDebugger默认是true,这里我将它改成了false。如果是true的话,需要先运行Unity,再在vscode开始调试;false则相反。ideConnectDebugger从字面意思理解就是ide连接到debugger,ide是vscode,debugger是Unity。再结合上面的hostport字段,可以猜出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.jsonWorkspace 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.textmain.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技术日渐成熟,大模型在各个领域的应用也越来越深入,国内互联网行业也随之进入了大模型竞赛的后半场,开始从“百模大战”转向了实际应用。大模型从通用到细分垂直领域的跨越,也让更多行业迎来了新的商机。…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...