繁体   English   中英

VS Code IntelliSense 不适用于 Unity3d

[英]VS Code IntelliSense not working for Unity3d

问题:IntelliSense 不适用于 Unity 特定的方法和函数(即UpdateFixedUpdateAwake等)。

但是,它确实适用于非 Unity 特定方法(即IEnumeratorvoidpublicfloatint等)和 Unity 特定变量(即Gameobjecttransformcamera等)和 Unity 特定命名空间(即、 UnityEngineUnityEditorUnity等)。

我正在使用:Visual Studio Code 1.41、Unity 3d 2018.4.15f1(我在使用 2019.2.x 时遇到了同样的问题)。

我尝试了以下解决方案,但没有结果:

  1. 使用不同版本的.NET
  2. 删除了项目中的 vscode 文件。
  3. 卸载并重新安装了 Unity 和 Visual Studio。
  4. <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>更改为<TargetFrameworkVersion>(Currently installed version)</TargetFrameworkVersion>但统一自动默认回到 v4.7.1

可能的问题:

  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。我不知道这是故意的还是这是问题所在。

  2. 在尝试解决方案 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 时遇到了同样的问题。

我可以按照以下步骤修复它:

  1. 在此处下载并安装 .Net Framework 4.7.1 开发包:

https://dotnet.microsoft.com/download/dotnet-framework/thank-you/net471-developer-pack-offline-installer

  1. 在 Unity 中,转到Edit > Project Settings > Player > API Compatibility Level并将其更改为 .NET 4.x

  2. 重启 VSCode & Unity

IntelliSense 现在工作正常,在 VSCode 中加载 .cs 文件时不再出现任何错误。

MacOS(VSCode 1.56.2 + Unity 2020.3.10f1)

通过采取以下步骤,我能够让 Unity + VSCode 智能感知感到高兴:

  1. 安装单声道($ brew install mono)
  2. 确保 Omnisharp 使用 Mono

2.1) VSCode > 代码 > 首选项 > 设置...
2.2) 搜索“全球单声道”...
2.3) 将“使用全局单声道”设置为“始终”...
2.4)重启Omnisharp(底部弹出消息中的蓝色按钮)

  1. 在 Unity 中,确保创建 .csproj 文件

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 中使用智能感知。

兄弟,我有你的答案。 解决方案非常简单,您只需确保您已经下载了这些工具:

  • Kleber Silva 的 Unity 代码片段
  • Unity Technologies 的 Unity 调试器
  • Tobiah Zarlez 的 Unity 工具

您可以在 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按钮。
  • 重新启动 Visual Studio Code,或按CTRL+SHIFT+P打开命令面板并重新启动 OmniSharp。

在 Unity 2020 中,我通过安装mono-devel并在设置中设置'omnisharp.useGlobalMono':'always'解决了这个问题。

PS 我在 ubuntu 20.04 中,一切都是最新的和默认的。

对我有帮助的是安装 VS 代码输出控制台(OmniSharp 日志)中指出的缺少的开发人员 SDK。

在我的情况下,它说在安装此(不是最新的 4.8)IntelliSense 后缺少 .NET 4.6。

https://dotnet.microsoft.com/download/dotnet-framework

我将 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:

  • 统一版本:2020.3
  • Unity > 首选项 > 外部工具 > 外部脚本编辑器 > Visual Studio for Mac [8.10.11]
  • 我还安装了 Package Manager > Visual Studio Editor (2.0.11)

最后,我从 Unity 中打开了我的 .cs 文件(或者,您可以右键单击并选择 Open C# Project)。 Visual Studio 打开后:

  • Visual Studio > 首选项 > 主题 > 黑暗(我们不是野蛮人...)
  • ...然后文件 > 打开 > 并打开我的 Unity 游戏 .sln 文件。
  • 我去了有问题的脚本尝试了一些事情,然后 badda-bing-badda-boom、intellisense 和我所有的东西都可以正常工作并顺利打开。

祝你好运。

对于Windows “找不到 .NETFramework,Version=v4.7.1 的参考程序集”然后安装开发人员包https://dotnet.microsoft.com/en-us/download/dotnet-framework/net471然后尝试退出并打开 vs代码如果不起作用则重新启动

对于 VS 代码 windows。 我解决了如下

我安装的规格:

  • VS 代码 1.70.1
  • .NET SDK 6.0.302
  • .NET 开发者包4.7.1
  • 统一2022.1.12f1
  • 统一中心 3.2.0

脚步:

  • 安装了以上所有软件
  • 删除任何旧的 VS Code 并安装上面提到的或最新的
  • 打开 VS Code 并从扩展只安装 C# 扩展。 等几秒
  • 关闭 VS Code 并打开 Unity 3d
  • 转到编辑 > 首选项 > 外部工具 > Select 脚本编辑器作为 VS 代码
  • 关闭 windows 并转到资产 > 打开 C# 项目。 请参阅 output 日志了解 [失败]
  • 我遇到了 .NET devpack 4.7.1 缺少问题,因此安装了以上版本
  • 完毕

到目前为止,我还没有发现任何智能感知问题。 它工作正常

在 Unity 中单击编辑>>首选项>>外部工具

通过浏览到安装 Visual Studio 的位置来选择Visual Studio 2019

注意:确保选中生成 .csproj 文件下方的所有复选框

在此处输入图像描述

在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM