在Visual Studio中编辑的Unity脚本无法提供自动完成功能

365

当我想编辑 C# Unity 脚本时,它们会在 Visual Studio 中打开。它应该为所有 Unity 相关的代码提供自动完成,但却无法正常工作。

下面您可以看到缺少的功能:

缺少自动完成功能的视频

如图所示,transform 对象不会打开自动完成菜单。

Unity 版本:5.5.2f1
Visual Studio 2015
已安装 Visual Studio Tools for Unity


3
请将视频制作并上传到YouTube,以描述错误+1 xd。 - Timon Post
好的,我会尝试... 我在脚本方面遇到了一点问题。当我使用Visual Studio为Unity编写C#脚本时,它看起来像是在记事本中工作,没有“提示”(对吗?),我必须非常缓慢地编写它。请看视频。开头是正常情况(来自教程),第二部分是我的问题。 - CorbenDalas
1
我想你是在问“自动完成”,而不是工具提示。 - Martijn Pieters
Visual Studio 版本和 Unity 版本是什么? - Programmer
Unity版本:5.5.2f1 / Visual Studio 2015 / 已安装Visual Studio Tools for Unity - CorbenDalas
显示剩余2条评论
37个回答

735

由于脚本显示了“Miscellaneous Files”而不是项目名称,因此没有自动完成。请看下面来自您问题视频的图像:

输入图像描述

Miscellaneous Files”消息可能会因为以下原因发生:

  1. 如果您从Unity Editor打开Unity C#文件而不是从另一个文件夹打开它,则可能会发生。

  2. 这也可能是因为Unity崩溃而Visual Studio仍然打开,因此损坏了某些文件。

  3. 当Unity关闭然后重新打开但不再连接到Visual Studio时,就会出现这种情况。当打开Visual Studio时,您会得到“Miscellaneous Files”,但自动完成不会出现。

  4. 如果未安装Visual Studio Tools for Unity,则会出现这种情况。

  5. 当您从Unity创建脚本,然后在Unity完成处理或圆形图标动画结束之前快速打开它时,也会发生这种情况。


大多数情况下,重新启动Unity和Visual Studio应该可以解决此问题。

我无法确定哪个原因导致了问题,但我将介绍最可能的解决方法。

修复第1部分

  1. 此链接下载并安装Visual Studio Tools for Unity。在Unity和Visual Studio都关闭的情况下执行此操作。

  • 从 Unity 编辑器中,前往 EditPreferences... → External Tools。在 External Script Editor 下拉菜单中,将其更改为 Visual Studio 2015

    enter image description here


  • 修复第二部分

    如果新创建的 C# 文件显示为 Miscellaneous,请按照以下说明进行操作:

    1. 从 Visual Studio 中,前往 ToolsOptions...Tools for UnityMiscellaneous。在 Show connectivity icon 下面,将其设置为 true,然后重新启动 Visual Studio。

      enter image description here

    2. 重新启动后,Visual Studio 中应该会出现连接图标。点击它,然后选择要连接的 Unity 实例。红色的“x”图标现在应该变成棕色的勾选标志图标。现在,在 Unity 中创建新的 C# 文件时,应该不会显示为 Miscellaneous

      enter image description here


    修复第三部分

    仍然没有解决吗?

    重新导入项目,然后打开 C# 项目。

    1. 关闭 Visual Studio。

    2. 从Unity开始,通过进入 AssetsReimport All 重新导入工程。

      enter image description here

    3. 然后,通过进入 AssetsOpen C# Project 在Visual Studio中打开该项目。这将重新加载项目并修复可能存在的解决方案文件问题。

      enter image description here


    修复第4部分::

    仍然没有解决吗?

    逐个修复每个C#文件。

    1. 点击 Show All Files 图标。

      enter image description here

    2. 选择不会自动完成的脚本,然后右键单击并选择 Include In Project

      enter image description here


    修复第5部分::

    还没有解决吗?

    感谢chrisvarnz提供的此特定解决方案,似乎已经为多个人解决了问题。

    1. 关闭Visual Studio

    2. 进入项目目录并删除所有生成的Visual Studio文件。

      需要删除以下文件扩展名:

      • .csproj
      • .user
      • .sln

      例如:

      假设您的项目名称为Target_Shoot,那么应该删除的文件如下:

      • Target_Shoot.csproj
      • Target_Shoot.Editor.csproj
      • Target_Shoot.Editor.csproj.user
      • Target_Shoot.Player.csproj
      • Target_Shoot.Player.csproj.user
      • Target_Shoot.sln

      请勿删除其他任何内容。

    3. 从Unity中再次双击脚本,这将生成新的Visual Studio文件,然后打开Visual Studio。这可能会解决您的问题。


    修复Part 6

    如果不起作用,请检查是否出现错误:

    The "GetReferenceNearestTargetFrameworkTask" task was not found

    1. 此处安装Nuget PackageManager

    2. 重新启动Visual Studio。

    有关更多信息,请参见此答案


    修复Part 7

    确保所有项目都已加载。 在“解决方案资源管理器”中,应显示# of # projects。

    如果没有显示所有的项目,右键点击“解决方案 (#个#个项目)”并单击“加载项目”。


    11
    感谢提供杂项文件指针!关闭VS,删除VS项目和sln,然后在Unity中双击脚本(因此重新生成项目文件并重新打开VS)即可解决。我建议在使用“重新导入全部”按钮之前尝试这种方法,因为对于非常规项目来说,“重新导入全部”需要很长时间,可能需要一整天或一整夜的时间。 - chrisvarnz
    3
    这是一个好建议。希望任何阅读此评论的人都能看到它。 - Programmer
    1
    这通常是由于在Unity中创建新脚本或将它们移动到不同文件夹中引起的。每当重新启动Unity和VS无法解决问题时,我会简单地删除*.csproj*.sln文件,然后重新启动Unity。这通常可以解决问题。 - derHugo
    2
    @chrisvarnz 的解决方案在我尝试了所有其他建议之后终于奏效了。 - gollumullog
    2
    @gollumullog 很好。由于这对多个人有效,我已更新我的答案以包括它。 - Programmer
    显示剩余20条评论

    137
    尝试一下这个,
    1. 在Unity编辑器中,点击菜单,选择编辑 -> 首选项 -> 外部工具 -> 外部脚本编辑器。将其设置为Visual Studio(你安装的版本)。
    2. 现在在菜单栏中,选择编辑 -> 项目设置 -> 玩家设置 -> 其他设置 -> 在配置下,勾选API兼容性级别 -> 将其更改为你安装的.Net版本。在我的情况下,我将其设置为.Net 4.x。
    现在,如果Visual Studio已经在运行,请打开Visual Studio,它会要求重新加载项目。重新加载项目后,检查是否正常工作,如果不正常,请关闭Visual Studio。现在从Unity编辑器中打开cs文件,现在应该可以正常工作。

    4
    我也是一样,谢谢!尝试了很多方法,但只有这个有效。 - Shadowmak
    15
    这是真正的答案。需要放在最顶部! - Mark Purnell
    2
    这对我也起作用了。此外,在Unity 2020.2.0a13中,我还做了一件额外的事情,就是取消选中并重新选中Edit/Project Settings/Player/Other Settings下的标记:Auto Graphics API。在重新启动Visual Studio后,自动完成功能又回来了:D - Ant100
    嗨。那个选项被灰掉了。我该怎么改变它? - Yilmaz
    这是真正的答案,伙计们,这是被接受的答案,这正好解决了这个问题。在播放器中使用Net 4.x,并设置外部编辑器。 - Steini Petur
    显示剩余4条评论

    21

    我找到了另一种更方便的方法来解决这个问题:

    1. 在“解决方案资源管理器”中选择损坏的文件。
    2. 打开文件属性。
    3. 将“生成操作”字段从“编译”切换到“无”。
    4. 然后再将其切换回“编译”状态。

    这样会以某种方式破坏Unity和Visual Studio之间的同步。

    下次 Visual Studio 重新加载项目时,它会弹出警告。 只需单击“放弃”即可。


    20
    如果你已经完成了以上步骤但仍然无法正常工作,可以尝试这个方法: 注意:你应该更新VS。 Visual Studio截图 进入Unity > 编辑 > 首选项 > 外部工具 > 外部脚本编辑器。 Unity截图 不知何故,我没有选择“Visual Studio”作为外部脚本编辑器,导致它无法正常工作。当我选择了它并从Unity中双击C#文件时,它就开始正常工作了。
    希望对你有所帮助。

    1
    非常适合之前已经安装了Visual Studio的Unity用户,我在安装了VS Unity工具后也成功使用了这个方法。 - Carol

    17

    3
    谢谢帮助!这个方法管用了,但我感觉我们好像回到了90年代,需要重新启动Windows,只不过这次是针对VS 2017。 - user3053247
    1
    谢谢,这对我非常有效!感谢您的分享! - Ratbyte Boss
    工作得像魔法一样顺利! - darahz

    12

    这个页面帮助我解决了问题。

    修复Unity与Visual Studio断开连接的问题

    在这里输入图片描述

    在Unity Editor中,选择“编辑”>“首选项”菜单。

    在左边选择“外部工具”选项卡。

    对于“外部脚本编辑器”,请选择您拥有的Visual Studio版本。

    点击“重新生成文件”

    完成!


    这个解决方案对我起作用了。然后,在打开一个脚本文件之后,Visual Studio编辑器建议我安装Unity工具,更新之后自动补全功能就正常工作了。谢谢! - andreini

    8
    1. 在Visual Studio中选择项目
    2. 点击“刷新”按钮

    enter image description here


    3
    哇!其他方法都没用;重新安装VS,甚至重新安装Unity以使其重新安装VS,删除.sln和.cjsproj文件以便它们重新生成。什么都没起作用...但最终在解决方案资源管理器中单击“显示文件夹”似乎解决了问题 :o - antont

    4

    今天我使用Visual Studio 2017 15.4.5和Unity 2017遇到了同样的问题。

    我通过在Visual Studio中右键单击项目并将目标框架从3.5更改为4.5来解决了这个问题。

    希望这可以帮助其他遇到类似情况的人。


    4

    两种备选方案:

    解决方法1

    @singleton指引了我一个方向。不要在Visual Studio中更改目标,而是在Unity中更改目标,因为该项目是自动生成的。

    首先删除自动生成的Visual Studio文件: .csproj .user .sln

    然后在Unity中转到PlayerSettings,在“其他设置”下将“脚本运行时版本”从稳定版3.5更改为实验版4.6。

    但是,这对我没有起作用。

    解决方法2

    我注意到所有与Unity相关的代码引用都被标记为黄色警告。检查您的错误日志,看看是否是这种情况。特别是看看是否出现以下错误:getreferenceNearestTargetframeworkTask

    如果是,请尝试: 重新启动Visual Studio Installer。

    在Build Tools 2017上,点击Modify,

    确保“Nuget targets and build tasks”已被选中。如果单击Universal Windows Platform development,则应该会变为选中状态。


    4

    使用 Visual Studio Community 2019 和 Unity 2019.3 进行更新:

    1. 以管理员身份打开“Visual Studio 安装程序”,选择修改当前安装并添加“针对 Unity 的游戏开发”

    2. 如果现在在 Unity 中添加新的 C# 脚本,并使用 Visual Studio 打开它(自动),则窗口顶部不再显示“杂项”,而是显示“Assembly-CSharp”,并且自动完成功能正常工作。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接