解决VSCode无法显示Unity代码提示的真正解决办法_vscode打开sln工程-程序员宅基地

技术标签: unity  代码提示  【Unity】紧急避坑  vscode  unity3d  


防盗镇楼 本文地址: https://blog.csdn.net/cbaili/article/details/110157060

前言

作为一个程序猿最头大的问题大概就是重装系统了…但偏偏时间久了项目一多,Python,Java,DotNet,AndroidSDK,Qt等等一系列环境版本配置的乱七八糟,导致出各种无头绪的报错…崩溃!

这里记录个我是如何在重装系统后正确解决VSCode代码提示问题的。

不提示原因

其实在网上搜罗了一圈以后,发现无非也就是几种情况会导致没有代码提示:

  1. 没有使用VSCode打开工程目录
  2. 没有指定正确的sln工程配置文件
  3. 系统中没有安装对应的.NET开发者版本(大多数人遇到的问题)
  4. Package Manager的VScode插件版本不对
  5. Unity新版插件Visual Studio Editor版本与VSCode不匹配(2023/12/15更新)
  6. 终极大招 以上都不好用的话试试重置项目目录

这个问题似乎纠结了许多网友,给出的解决方式要么看命要么根本不对症。在此整理一下终极解决方式以及我探索出的实际解决方法。

尝试解决问题

步骤1:验证是否正确打开工程目录

使用vscode 写unity文件无法自动提示代码)
如果你只打开的单独的cs文件而工程目录没有正确的跟进去,VSCode是找不到Unity的Library文件夹的。
在这里插入图片描述
你可以查看VSCode左侧的资源管理器,查看列表当中是否有sln文件。如果有继续往下看。
如果没有,打开Unity菜单Edit->Preferences->Extermal Tools中 点击Regenerate project files
在这里插入图片描述

步骤2:验证工程是否指定正确

VSCode无法进行Unity C#智能提示,代码补全以及方法跳转等功能的解决方案!
在这里插入图片描述
按下键盘的Ctrl/Command + Shift+ P快捷键,选定工程目录下的sln文件。
至此,如果你以前是有代码提示的,稍等几秒等待自动加载完成以后你可以重试一下是否有代码提示功能。

步骤3:检查和安装对应的.NET开发者版本

!!! 注意 Unity2020(LTS)+版本以后请参阅 后面的2023/12/15更新补充
!!! 下方安装.Net v4.7.1的方式适合Unity2019以下的老版本修复
!!! 如果你的工程目录里没有Assembly-CSharp也不要急,可能新版本导致的,同样参阅后面的2023/12/15更新补充

  1. 用VSCode打开你工程目录下的.csproj文件。
  2. 找到Project->PropertyGroup->TargetFrameworkVersion这条数据,如下图:在这里插入图片描述
  3. 记住你的版本号,到这下载对应版本号的开发者版 .NET Framework 。
    https://docs.microsoft.com/zh-cn/dotnet/framework/deployment/deployment-guide-for-developers
    这里我看到有的帖子说要改这个版本号,其实不然。如果你改了下次你创建新工程的时候还需要如此操作,且这种方法不见得就能够生效。在这里插入图片描述
  4. 以我的为例,我的是4.7.1,那么就戳这个连接进去,跳到下载页面。
    在这里插入图片描述
  5. 注意你需要下载Developer版本的,如果是Runtime版本很可能安装的时候会提示你已经安装了当前或更高版本的.NET从而拒绝你安装。当然稳妥方式都装一遍…
  6. 装完以后,重开VSCode。你期待的代码提示就会出现了!
**------华丽的分割线------**
2022/07/01更新补充:

最近忍不住升级了Win11,打开VSCode发现右下角弹窗报错找不到.Net SDK,
然而我使用老套路安装了.Net 4.7.1以后还是找不到.
于是鬼使神差的装了.NET6.0,重启以后便好了.
同时也感谢评论区的Kevinjing110分享了解决方法.
.
使用方法:

  • 安装前你可以先在cmd里面敲where dotnet来确认是否已经安装了.net
  • 如果回显出路径则表示已经安装,如果提示找不到则需要安装.Net6.0
  • 你可以戳这个.Net 6.0下载链接,随后等待几秒钟自动开始下载.
  • 下载完毕后双击安装
  • 重启系统(一些系统需要重启系统变量才会生效)

2023/12/15更新补充

最近又搞起了Unity,然而不出意外系统又重装了,发现VSCode的.NET相关插件发生了不小的变化
这次的Unity版本用的是2021.3.23f1c1,打开项目依旧出现问题

  1. 解决Unity双击脚本打开的VSCode没有打开工程目录
  • 查看Unity菜单Edit->Preferences->Extermal ToolsExternal Script Editor是否为Visual Studio Code
    在这里插入图片描述
  • 如果不是,点击一下,找找有没有Visual Studio Code[...]这个选项
  • 情况1:没有 且你的版本低于2019,请选择 Browse...手动指定你的VSCode应用程序
    – 随后在下一行会出现Extermal Script Editor Args这个选项,用于配置VSCode启动命令行
    –它的默认参数应该是"$(ProjectPath)" -g "$(File)":$(Line):$(Column)
    – 如果不对点击下面的[Reset argument][Regenerate project files]按钮重置命令行和工程依赖文件,随后重开Unity
  • 情况2:如果没有 且你的版本高于2019,请在Package Manager中,搜索vis 找到Visual Studio Editor这个插件,看看是不是最新的 不是就升级
    在这里插入图片描述
    – 这个插件升级后,External Script Editor应该就会出现Visual Studio Code[…]这个选项了
    – 升级后这个选项有些变化,你会发现让你配置命令行Extermal Script Editor Args这个选项消失了

随后在VSCode中安装新版Unity插件
在VSCode插件库中搜索安装Unity这个拓展,同时它会自动安装C#C# Dev Kit这两个拓展依赖
在这里插入图片描述
C#C# Dev Kit依赖于.NET Install Tool拓展,它负责自动下载部署.NET依赖环境
VSCode打开以后,你可能会看到控制台输出弹出了正在下载.Net7.0.14的信息
在这里插入图片描述
然而这个地址来自于Github,国内大部分网络是访问不了的
别急 我们手动下载

  • 安装一路Next,随后关闭VSCode 然后在Unity中重新双击你的脚本文件
    理论上这时候应该就不会弹出下载了 emmm…注意!!只是是理论上.
    实际上这玩意不太灵光,参阅解决VSC中使用Unity插件时“download the .NET Runtime.”的问题
    摘要:根据开发者的回复,目前只能由用户自己配置VSC的setting.json。
    所以需要在工程目录下的.vscode/setting.json配置文件里加上这样的配置:
"dotnetAcquisitionExtension.existingDotnetPath": [
  {
     
      "extensionId": "ms-dotnettools.csharp",
      "path": "C:\\Program Files\\dotnet\\dotnet.exe"
  },
  {
     
      "extensionId": "visualstudiotoolsforunity.vstuc",
      "path": "C:\\Program Files\\dotnet\\dotnet.exe"
  }
]

就很闹挺!

啰嗦一下
时过境迁,未来这个版本号可能还会发生改变,所以你需要根据自己的提示安装对应的版本
这是.Net官网,到这里寻找自己的版本下载 https://dotnet.microsoft.com/zh-cn/download/dotnet

2023/10/19更新补充:

终极大招 重置项目目录

看到评论反馈 有的朋友按照上述操作后还是出现不提示 这里突然想到一个解决办法可以尝试

  1. 复制一份项目做备份 记住项目所使用的unity版本
  2. 删除掉assets目录以外的全部文件和文件夹
  3. 重新用unity打开这个目录

分析一下

有些不提示的原因是因为老unity工程用新版本unity打开导致的,目录内可能会存在版本不符合的缓存以及api dll文件,删除它们让unity重新构建可能会好
另外查看.csproj文件,是否有指向dll文件的数据
检查这些指向路径是否正确,不对的话将他们删除或者手动修复试试

代码提示有了,但找不到UnityEngine.UI等类

这个问题很好解决,我这里用的是2019.3.11f1版本。原因是这个版本的UI库文件挪位置了,而Unity新推出的Unity Package Manager插件没跟上步伐导致的…官方的坑!

步骤1:点开Unity的 Package Manager,找到右Visual Studio Code Editor,选择1.2.0以后的版本,然后点击右下角的升级按钮。(注意如果你用的2019,插件不要用太新的版本.否则还是会出现.不出来的情况.)在这里插入图片描述
步骤2:保存并关闭Unity和VSCode,到工程目录下删除所有的*.sln和*.csproj文件。
步骤3:重新打开Unity和这个工程,刚被删除的这两个文件将会被重新创建,届时这个故障就解决了。
如果你不想重启unity和vscode参照这个帖子https://blog.csdn.net/weixin_45476117/article/details/108911678

gameobject什么的只能.出一个智能引用

这里还是Unity Package Manager的插件惹的祸,我这里用1.2.0可以但是升级到1.2.3就出现这个问题.建议降级到低版本尝试.
在这里插入图片描述

其他相关

利用控制台定位问题

如果你发现按照上面一波操作以后问题依旧没有解决,这时候就需要你自己寻找故障所在了。这里提供一个方法来帮助你快速准确的找到自己的故障点所在。

1.留意你的VSCode控制台输出面板,通常在这里会弹出启动调试信息。

  • 在右上角可以切换某个拓展的调试信息,主要检查.Net相关的即可.
  • 仔细阅读输出的报错信息,大部分错误都会有告诉你解决问题的方式。
    看不懂的话取去翻译一下根据步骤来,不要盲目相信神论,找到问题的根本才是解决BUG的真谛…
    由于我这里已经解决好了环境问题,所以没有提示出找不到Unity类等错误信息,左侧的大纲也能够正常显示出来了。
    如果你的输出控制台有一大堆报错也不用慌,其实找到关键问题就都迎刃而解了。
    在这里插入图片描述

推荐撸Unity用的VScode插件

这是VSCode官方推荐的几个社区插件,这里复制过来安利一下
引用地址: https://code.visualstudio.com/docs/other/unity

C#
这个几乎是必装的插件,用于支持C#的一些日常sao操作.

  • .NET Core的轻量级开发工具。
  • .强大的C#编辑支持,包括语法突出显示,IntelliSense,转到定义,查找所有引用等。
  • 对.NET Core(CoreCLR)的调试支持。注意:不支持Mono调试。桌面CLR调试的支持有限。
  • .在Windows,macOS和Linux上支持project.json和csproj项目。

Unity Code Snippets
神器一件,这个工具可以帮助你快速的撸出OnTriggerEnter() OnApplicationQuit() 等等的代码片段,几乎全覆盖,去官网看下在这里插入图片描述

感谢观看,好使了别忘一键三连哦~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cbaili/article/details/110157060

智能推荐

2021-07-21实用型OEM信息修改_修改oem信息-程序员宅基地

文章浏览阅读298次。实用型OEM信息修改1:在Windows10系统桌面,我们右键点击左下角的开始按钮,在弹出菜单中选择“运行”菜单项。2:接下来在打开的运行窗口中输入命令regedit,然后点击确定按钮。3:在打开的注册表编辑器窗口中,我们定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation注册表项。4:我们右键点击右侧窗口中的空白位置,在弹出菜单中依次点击“新建/字符串值”菜单项。5:我们把刚刚新建的字符串值修_修改oem信息

Elasticsearch 插入时间字段时数据格式问题_elasticsearch通过curl方式批量导入数据之后,time字段不对-程序员宅基地

文章浏览阅读819次。转自:https://segmentfault.com/a/1190000016296983_elasticsearch通过curl方式批量导入数据之后,time字段不对

Linux下LCD驱动详细分析(一)_linux fb pseudo_palette-程序员宅基地

文章浏览阅读1.5w次,点赞3次,收藏16次。貌似好久好久没写驱动类的博客,距上一次写驱动的博客还得回到半年前,那时天气还很冷,如今已经热的要命,但我还是想把自己学习到的知识跟大家分享。没写驱动类的博客是觉得Linux下的驱动源码真是太多太多了,半年前我也比较害怕Linux源代码,随时时间的推移,自己琢磨了不短时间了,觉得大概能读懂Linux源代码了,也就没那么害怕它了。原归正传,预定以后的驱动博客我想用尽量短篇幅来记录,但是会以尽量详细_linux fb pseudo_palette

java: 程序包org.springframework.boot不存在的解决方法-程序员宅基地

文章浏览阅读1.9k次。在项目根目录执行mvn -U idea:idea命令。_java: 程序包org.springframework.boot不存在

庆祝祖国成立72周年 做点题目之 BUUCTF Crypto 刷题_buuctf 一张谍报-程序员宅基地

文章浏览阅读969次,点赞3次,收藏2次。BUUCTF 刷题之 Crypto 部分wp大二了,事情很多,省赛在即,速刷题,强技能,展风采!文章目录BUUCTF 刷题之 Crypto 部分wp一、这是什么二、[HDCTF2019]bbbbbbrsa三、古典密码知多少四、[WUSTCTF2020]佛说:只能四天五、[BJDCTF2020]RSA六、[MRCTF2020]天干地支+甲子七、[BJDCTF2020]rsa_output八、[MRCTF2020]vigenere九、[BJDCTF2020]signin十、[ACTF新生赛2020_buuctf 一张谍报

HelloJava.java:1: 错误: 写入HelloJava时出错: HelloJava.class (拒绝访问。)_hello.java:1: 错误: 写入hello时出错: hello.class (拒绝访问。)-程序员宅基地

文章浏览阅读6.4k次,点赞6次,收藏5次。错误: 写入HelloJava时出错: HelloJava.class (拒绝访问。)原因:系统权限未打开方法:在计算机文件中找到cmd.exe用以管理员身份运行再操作即可_hello.java:1: 错误: 写入hello时出错: hello.class (拒绝访问。)

随便推点

如何将GB7714-2015格式的参考文献表转换为bib文件_windows系统中的latex如何使用gb7714texttobib-程序员宅基地

文章浏览阅读7.3k次,点赞10次,收藏16次。如何将GB7714-2015格式的参考文献表转换为bib文件背景latex使用参考文献是一个自动化的工作,但建立和维护bib文件其实一个长期的积累活动。有些参考文献的bibtex数据是存在,比如从各类学术网站上可以下载到。但有些网站并没有提供这个,比如cnki就不提供bib文件信息。一种解决方法是使用zotero进行抓取,然后保存到bib文件中。除此之外,其实还有一种从参考文献著录文本转换为bib文件的途径。因为cnki会提供当前文献的GB7714-2015格式的著录文本,如果我们将这一文本复制_windows系统中的latex如何使用gb7714texttobib

10个简单小窍门带你提高Python数据分析速度(附代码)-程序员宅基地

文章浏览阅读1.2k次。翻译 | 吴慧聪校对 | 吴振东来源 | 数据派THU(DatapiTHU)本文将介绍10个Jupyter Notebook中进行数据挖掘的提速小技巧。简介提示和技巧总是..._python 提升数据的查找速度

Linux下如何使用蓝牙_linux 8265蓝牙-程序员宅基地

文章浏览阅读898次。转载于http://www.51testing.com/?uid-175444-action-viewspace-itemid-78932蓝牙是多家移动设备制造商选择的无线协议,是一种短距离无线传输技术。它拥有多项吸引人的特性,最重要的是它在数据传输上的低能耗。目前市场上设备中运行的蓝牙协议有三个版本:分别是版本 1.1、1.2 AFH 和 2.0+EDR。新版本的协议与旧版本完全兼容。_linux 8265蓝牙

distinct (去重)_distinct()-程序员宅基地

文章浏览阅读2.9w次,点赞4次,收藏21次。在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。表A:表B:1.作用于单列select distinct name from A执行后结果如下:2.作用于多列示例2.1select distinct name, id from A执行后结果如下:实际上是根据name和id两个..._distinct()

tslearn学习:快速入门-程序员宅基地

文章浏览阅读1.6k次,点赞3次,收藏11次。tslearn快速入门学习。_tslearn

虚拟化概述_虚拟机的cpu架构必须一致吗-程序员宅基地

文章浏览阅读1k次。一、概述 虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而且不影响,从而显著的提高工作效率。 虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPu模拟多CPU并行,允许一个平台运行多个操作系统,并且应用程序都可以在相互独立的空间运行而互不影响,从而显著提高计算机的工作效率二、虚拟化的类别1、模拟emulati..._虚拟机的cpu架构必须一致吗