[英]VS Code IntelliSense not working for Unity3d
问题:IntelliSense 不适用于 Unity 特定的方法和函数(即Update
、 FixedUpdate
、 Awake
等)。
但是,它确实适用于非 Unity 特定方法(即IEnumerator
、 void
、 public
、 float
、 int
等)和 Unity 特定变量(即Gameobject
、 transform
、 camera
等)和 Unity 特定命名空间(即、 UnityEngine
、 UnityEditor
、 Unity
等)。
我正在使用:Visual Studio Code 1.41、Unity 3d 2018.4.15f1(我在使用 2019.2.x 时遇到了同样的问题)。
我尝试了以下解决方案,但没有结果:
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
更改为<TargetFrameworkVersion>(Currently installed version)</TargetFrameworkVersion>
但统一自动默认回到 v4.7.1可能的问题:
项目创建的 sln 文件读取
Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp.csproj", "{B2B58FB2-4462-6B0C-A872-40DD957E5FE0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {B2B58FB2-4462-6B0C-A872-40DD957E5FE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B2B58FB2-4462-6B0C-A872-40DD957E5FE0}.Debug|Any CPU.Build.0 = Debug|Any CPU {B2B58FB2-4462-6B0C-A872-40DD957E5FE0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B2B58FB2-4462-6B0C-A872-40DD957E5FE0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = Assembly-CSharp.csproj EndGlobalSection EndGlobal
出于某种原因,sln 文件似乎用于 Visual Studio 2010。我不知道这是故意的还是这是问题所在。
在尝试解决方案 4 时,如上所述,Unity(或我所知道的 VS Code)会自动将 .NET 版本从我手动输入的任何内容更改为 4.7.1。 我已经安装了 4.7.1,所以这可能不是问题。
额外的信息:
这是omnisharp日志:
Starting OmniSharp server at 2020. 1. 20. 오후 9:08:43
Target: c:\Users\stpau\New Unity Project\New Unity Project.sln
OmniSharp server started.
Path: C:\Users\stpau\.vscode\extensions\ms-vscode.csharp-1.21.9\.omnisharp\1.34.9\OmniSharp.exe
PID: 2232
[info]: OmniSharp.Stdio.Host
Starting OmniSharp on Windows 6.2.9200.0 (x64)
[info]: OmniSharp.Services.DotNetCliService
DotNetPath set to dotnet
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
Located 1 MSBuild instance(s)
1: StandAlone 16.3 - "C:\Users\stpau\.vscode\extensions\ms-vscode.csharp-1.21.9\.omnisharp\1.34.9\.msbuild\Current\Bin"
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
MSBUILD_EXE_PATH environment variable set to 'C:\Users\stpau\.vscode\extensions\ms-vscode.csharp-1.21.9\.omnisharp\1.34.9\.msbuild\Current\Bin\MSBuild.exe'
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
Registered MSBuild instance: StandAlone 16.3 - "C:\Users\stpau\.vscode\extensions\ms-vscode.csharp-1.21.9\.omnisharp\1.34.9\.msbuild\Current\Bin"
CscToolExe = csc.exe
CscToolPath = C:\Users\stpau\.vscode\extensions\ms-vscode.csharp-1.21.9\.omnisharp\1.34.9\.msbuild\Current\Bin\Roslyn
MSBuildExtensionsPath = C:\Users\stpau\.vscode\extensions\ms-vscode.csharp-1.21.9\.omnisharp\1.34.9\.msbuild
MSBuildToolsPath = C:\Users\stpau\.vscode\extensions\ms-vscode.csharp-1.21.9\.omnisharp\1.34.9\.msbuild\Current\Bin
[info]: OmniSharp.Cake.CakeProjectSystem
Detecting Cake files in 'c:\Users\stpau\New Unity Project'.
[info]: OmniSharp.Cake.CakeProjectSystem
Could not find any Cake files
[info]: OmniSharp.MSBuild.ProjectSystem
Detecting projects in 'c:\Users\stpau\New Unity Project\New Unity Project.sln'.
[info]: OmniSharp.MSBuild.ProjectManager
Queue project update for 'c:\Users\stpau\New Unity Project\Assembly-CSharp.csproj'
[info]: OmniSharp.Script.ScriptProjectSystem
Detecting CSX files in 'c:\Users\stpau\New Unity Project'.
[info]: OmniSharp.Script.ScriptProjectSystem
Could not find any CSX files
[info]: OmniSharp.WorkspaceInitializer
Invoking Workspace Options Provider: OmniSharp.Roslyn.CSharp.Services.CSharpFormattingWorkspaceOptionsProvider, Order: 0
[info]: OmniSharp.MSBuild.ProjectManager
Loading project: c:\Users\stpau\New Unity Project\Assembly-CSharp.csproj
[info]: OmniSharp.WorkspaceInitializer
Invoking Workspace Options Provider: OmniSharp.Roslyn.CSharp.Services.RenameWorkspaceOptionsProvider, Order: 100
[info]: OmniSharp.WorkspaceInitializer
Invoking Workspace Options Provider: OmniSharp.Roslyn.CSharp.Services.EditorConfigWorkspaceOptionsProvider, Order: 200
[info]: OmniSharp.WorkspaceInitializer
Configuration finished.
[info]: OmniSharp.Stdio.Host
Omnisharp server running using Stdio at location 'c:\Users\stpau\New Unity Project' on host 8980.
[info]: OmniSharp.MSBuild.ProjectManager
Successfully loaded project file 'c:\Users\stpau\New Unity Project\Assembly-CSharp.csproj'.
[info]: OmniSharp.MSBuild.ProjectManager
Adding project 'c:\Users\stpau\New Unity Project\Assembly-CSharp.csproj'
[info]: OmniSharp.MSBuild.ProjectManager
Update project: Assembly-CSharp
我怎么解决这个问题? 我也在 reddit 和 Unity 论坛上问过这个问题,但没有成功。
在最新版本的 VS Code 和 Omnisharp 中,我遇到了同样的问题并解决了在 Unity 中启用此选项的问题:
编辑 > 首选项 > 外部工具 > 生成所有 .csproj 文件。
使用 VSCode 1.41.1 和 Unity 2019.4.0f1 时遇到了同样的问题。
我可以按照以下步骤修复它:
在 Unity 中,转到Edit > Project Settings > Player > API Compatibility Level并将其更改为 .NET 4.x
重启 VSCode & Unity
IntelliSense 现在工作正常,在 VSCode 中加载 .cs 文件时不再出现任何错误。
MacOS(VSCode 1.56.2 + Unity 2020.3.10f1)
通过采取以下步骤,我能够让 Unity + VSCode 智能感知感到高兴:
2.1) VSCode > 代码 > 首选项 > 设置...
2.2) 搜索“全球单声道”...
2.3) 将“使用全局单声道”设置为“始终”...
2.4)重启Omnisharp(底部弹出消息中的蓝色按钮)
3.1) Unity > Preferences > External Tools > 将 External Script Editor 设置更改为“Visual Studio Code” 3.2) Unity > Preferences > External Tools > Generate all .csproj files (检查所有复选框)
通过这些步骤,我可以在我的 Unity 项目中定位 .Net Standard 2.0 并在 VSCode 中使用智能感知。
兄弟,我有你的答案。 解决方案非常简单,您只需确保您已经下载了这些工具:
您可以在 VSCode 上找到它们,安装后,关闭 VSCode 并重新打开。 这就是全部。
对于与您相同的问题,我一直在寻找任何可能的解决方案,但答案与您的鼠标右手一样远。
对于那些至今仍在苦苦挣扎的人来说,这个问题有一个有保证的解决方案,缺点是你不能使用.NET Standard 2.0
作为你的 API 兼容级别。 无论如何:
Edit > Project Settings > Player
,向下滚动到Configuration
并将您的 API 兼容性级别更改为.NET 4.x
。Window > Package Manager
并确保Visual Studio Code Editor
包已更新到最新版本。Edit > Preferences > External Tools
并确保您使用 Visual Studio Code 作为外部脚本编辑器,然后按Regenerate project files
按钮。CTRL+SHIFT+P
打开命令面板并重新启动 OmniSharp。在 Unity 2020 中,我通过安装mono-devel
并在设置中设置'omnisharp.useGlobalMono':'always'
解决了这个问题。
PS 我在 ubuntu 20.04 中,一切都是最新的和默认的。
对我有帮助的是安装 VS 代码输出控制台(OmniSharp 日志)中指出的缺少的开发人员 SDK。
在我的情况下,它说在安装此(不是最新的 4.8)IntelliSense 后缺少 .NET 4.6。
我将 Unity 包管理器中的 Visual Code Editor 包降级为 1.20(2022 年 1 月),一切正常。 这是从 1.2.4 降级的版本。 两者之间的一个版本也可能有效,但它有效,所以 Ik 离开了它 :)
感谢上面的@pang 的想法。
安装了 Mono 6.12 的 Unity 2020.3.25。
我有同样的要求,终于找到了一个简单的解决方案。 我刚刚切换到另一个 IDE,JetBrains 提供的 Rider。 Unity 支持它,反之亦然。
我有类似的问题。 我刚刚发现问题是因为 OmniSharp 无法正确连接到服务器。 该解决方案只是在您的项目 Assembly-CSharp.csproj 中打开,其中包含您的一些项目设置。然后将这行代码添加到脚本
<PropertyGroup>
<DefaultItemExcludes>node_modules/**;$(DefaultItemExcludes)</DefaultItemExcludes>
</PropertyGroup>
它对我有用。 顺便说一句,如果您想了解有关此https://github.com/dotnet/sdk/issues/8659的更多详细信息
编辑:我又遇到了这个问题。 我为此找到了另一种解决方案。 首先打开一个C#脚本(可以是任何脚本都没有关系)。 然后打开终端并在终端输出上选择 OmniSharp,然后稍等,但不要关闭脚本和终端,您必须让它们保持打开状态,我认为这是一个错误。 给它一点时间。 如果您遇到“Omnisharp 无法连接它需要太长时间”之类的错误,我不记得在错误时输入的确切内容,但似乎是这样。 然后按 ctrl + shift + P 并选择开发人员重新加载窗口,然后再次打开终端->> 输出->> OmniSharp 日志并等待。在第二次或第三次尝试后工作 2-3 分钟。
对我来说,问题在于错误的解决方案( .sln
)文件! (:
在 VS Code 的左下角,应该有一些project.sln
文件名。 我打开了project-csharp.sln
而不是project.sln
,所以我通过单击它来更改它。 此外,我还生成了所有.csproj
文件,如此处所述。
如果您的存储库中有 .gitignore,请将 .gitignore .gitignore 中的 .sln (#.sln) commnet out以实现统一,以便 VSCode 可以识别 sln 文件,然后您将让 IntelliSense 正常工作。 VSCode .sln
另一个想法,适用于遇到类似 IntelliSense 问题的人不适用于 VS Code 中的 Unity 2019 脚本。 我尝试了在论坛上找到的大多数常见解决方案,但最终为我修复它的事情是降级 Unity 包管理器中的 VS Code 插件的版本(即使我最终低于“验证版本”) .
我硬着头皮下载了完整的Visual Studio for Mac 。 经过几个小时令人沮丧的圈子并在 Unity 论坛和 StackOverflow 上尝试了几个不起作用的建议后,我放弃了 Visual Studio Code。
我立即注意到的一件事是 Visual Studio 安装会自动提示您下载必要的 .NET 内容。 安装 Visual Studio 后,我不必运行任何命令来安装东西(尽管我之前确实为 VS Code 下载了dotnet
和 Mono 安装,所以谁知道是否使用了这些...)。
安装 Visual Studio for Mac 后,我进入 Unity 并通过更新我的首选项将 Visual Studio 作为我的外部编辑器打开 Visual Studio Code:
最后,我从 Unity 中打开了我的 .cs 文件(或者,您可以右键单击并选择 Open C# Project)。 Visual Studio 打开后:
祝你好运。
对于Windows “找不到 .NETFramework,Version=v4.7.1 的参考程序集”然后安装开发人员包https://dotnet.microsoft.com/en-us/download/dotnet-framework/net471然后尝试退出并打开 vs代码如果不起作用则重新启动
对于 VS 代码 windows。 我解决了如下
我安装的规格:
脚步:
到目前为止,我还没有发现任何智能感知问题。 它工作正常
在 Unity 2020(在 Mac 上,而不是 Windows)中,唯一对我有用的解决方案是将 Visual Studio(而不是 VSCode)设置为脚本编辑器。 您可以在 Unity 中执行此操作:Unity > Preferences > External Tools > 从“External Script Editor”下拉列表中选择“Visual Studio for Mac”。 单击要在 Unity 中编辑的脚本。 它现在应该在 Visual Studio 中打开,并且智能感知应该可以工作。
编辑:之后,将 vscode 设置为编辑器,不要重新生成项目文件,它会工作的。 对我有用,但我需要在每次发布时都这样做,这一切都像 2 个月前一样工作正常,〜 2021 年 8 月。我使用的是最新的统一稳定版本,而不是 lts。
这不是你的问题的解决方案,但我认为它根本没有问题。 不幸的是,就目前而言,用于 VS Code 的 IntelliSense 不应该适用于 Unity 特定的方法和功能,我相信它。
作为一种解决方法,您可以使用Unity 代码片段扩展,它将为 IntelliSense 带来一些方法。 对我来说唯一的问题是它使用了 K&R 格式,所以我为此制作了自己的片段文件。
也许您也注意到了,但如果您的脚本中已经定义了一些 Unity 方法,IntelliSense 会检测到它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.