VS Code IntelliSense 不适用于 Unity3d

Pau*_*aul 14 c# unity-game-engine visual-studio-code

问题:智能感知不工作为统一的具体方法和功能(即UpdateFixedUpdateAwake等等)。

它的工作,但是,对于非统一的具体方法(即IEnumeratorvoidpublicfloatint,等)和统一的具体变量(即Gameobjecttransformcamera,等),并统一命名空间特定(即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
    
    Run Code Online (Sandbox Code Playgroud)

    出于某种原因,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
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?我也在 reddit 和 Unity 论坛上问过这个问题,但没有成功。

小智 40

在最新版本的 VS Code 和 Omnisharp 中,我遇到了同样的问题并解决了在 Unity 中启用此选项的问题:

编辑 > 首选项 > 外部工具 > 生成所有 .csproj 文件。

  • 可悲的是,这可能一次有效,但你必须继续这样做。即使您找到了让它短时间工作的方法,Intellisense 仍然会禁用。 (3认同)

fri*_*uck 19

使用 VSCode 1.41.1 和 Unity 2019.4.0f1 时遇到了同样的问题。

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

  1. 在此处下载并安装 .Net Framework 4.7.1 Developer Pack:

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 文件时不再出现任何错误。

  • 这对我有用,但我不知道它是否有缺点。 (2认同)

小智 9

MacOS(VSCode 1.56.2 + Unity 2020.3.10f1)

通过采取以下步骤,我能够使 Unity + VSCode 智能感知满意:

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

2.1) VSCode > Code > Preferences > Settings...
2.2) 搜索“global mono”...
2.3) 将“Use Global Mono”设置为“always”...
2.4) 重新启动 Omnisharp(底部弹出消息中的蓝色按钮)

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

3.1) Unity > 首选项 > 外部工具 > 将外部脚本编辑器设置更改为“Visual Studio Code” 3.2) Unity > 首选项 > 外部工具 > 生成所有 .csproj 文件(选中所有复选框)

通过这些步骤,我能够在 Unity 项目中以 .Net Standard 2.0 为目标,并在 VSCode 中使用智能感知。


小智 6

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

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

你可以在 VSCode 上找到它们,安装后,关闭 VSCode 并重新打开。这就是全部。

对于与您的问题相同的问题,我一直在寻找我能找到的任何可能的解决方案,但答案就像鼠标的右手一样。

  • 这些扩展向 VS Code 添加了一些不错的代码片段,但不提供完整的智能感知! (5认同)

小智 5

对于那些至今仍在苦苦挣扎的人来说,有一个有保证的解决方案来解决这个问题,缺点是你不能使用.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。


小智 -14

这不是解决你的问题,但我认为它根本没有问题。不幸的是,目前 VS Code 的 IntelliSense 不应该适用于 Unity 特定的方法和函数,我相信它。

作为一种解决方法,您可以使用Unity 代码片段扩展,它将为 IntelliSense 带来一些方法。对我来说唯一的问题是它使用 K&R 格式,所以我为此制作了自己的代码片段文件。

也许您也注意到了,如果您的脚本中已经定义了一些 Unity 方法,则 IntelliSense 会检测到它们。