在本節中,您將找到 Visual Studio Tools for Unity 之常見問題的解決方法、已知問題的描述,並了解如何透過回報錯誤來協助改善 Visual Studio Tools for Unity。
針對 Unity 與 Visual Studio 之間的連線進行疑難排解
確認已啟用 Editor Attaching
,或 Code Optimization On Startup
已設定為 Debug
在 Unity 功能表中,選取 [Edit / Preferences
]。
視使用的 Unity 版本而定:
- 確認
Code Optimization On Startup
設定為Debug
。 - 或選取 [
External Tools
] 索引標籤。確認已啟用 [Editor Attaching
] 核取方塊。
如需詳細資訊,請參閱 Unity 喜好設定文件。
無法附加
- 請嘗試暫時停用您的防毒軟體,或為 VS 和 Unity 建立排除規則。
- 請嘗試暫時停用防火牆,或建立規則以允許 VS 與 Unity 之間的 TCP/UDP 網路功能。
- 某些程式 (例如 Team Viewer) 可能會干擾處理序偵測。 您可以嘗試暫時停止任何額外的軟體,以查看是否有任何不一樣。
- 因為 VSTU 只會監視 "Unity.exe" 處理序,所以請不要重新命名主要 Unity 可執行檔。
Visual Studio 當機
此問題可能是因為 Visual Studio 的 MEF 快取損毀所致。
請嘗試移除下列資料夾以重設 MEF 快取 (先關閉 Visual Studio 再執行此動作):
%localappdata%\Microsoft\VisualStudio\<version>\ComponentModelCache
這麼做應該可以修正您的問題。 如果仍然遇到問題,請以系統管理員身分執行 Visual Studio 的開發人員命令提示字元,然後使用下列命令:
devenv /setup
Visual Studio 停止回應
剖析、FMOD、UMP (通用媒體播放程式)、ZFBrowser 或 Embedded Browser 這類 Unity 外掛程式會使用原生執行緒。 但當外掛程式最後將原生執行緒附加到執行階段時則會發生問題,因為這會導致作業系統的呼叫受到封鎖。 這表示 Unity 無法為偵錯工具中斷該執行緒 (或網域重新載入),因此停止回應。
針對 FMOD,有下列因應措施:您可以傳遞 FMOD_STUDIO_INIT_SYNCHRONOUS_UPDATE
初始化旗標以停用非同步處理,並在主執行緒上執行所有處理。
如果您要開發自己的原生外掛程式,建議您在偵錯工具需要暫停執行緒時,使用 非同步程序呼叫 ( APC ),特別是 SleepEx
、 SignalObjectAndWait
、 MsgWaitForMultipleObjectsEx
WaitForMultipleObjectsEx
或 函 WaitForSingleObjectEx
式,以適當配合 Unity 和 Mono。
Visual Studio 中的不相容專案
請務必知道 Visual Studio 會在專案設定中儲存「不相容」狀態,而且在您明確使用 Reload Project
之前,不會嘗試重新載入專案。 因此,在每個疑難排解步驟之後,請確定您嘗試重新開啟方案,並嘗試以滑鼠右鍵按一下所有不相容的專案,然後選擇 [Reload Project
]。
- 使用
Edit / Preferences / External Tools
,確認 Visual Studio 在 Unity 中已設定為您的外部指令碼編輯器。 - 視您的 Unity 版本而定:
- 確認 Visual Studio 外掛程式已安裝在 Unity 中。
Help / About
應該會在底部顯示類似「Microsoft Visual Studio Tools for Unity 已啟用」的訊息。 - Unity 2020.x+:確認您在
Window / Package Manager
中使用最新的 Visual Studio 編輯器封裝。
- 確認 Visual Studio 外掛程式已安裝在 Unity 中。
- 請嘗試刪除專案中的所有專案/方案檔案和
.vs
資料夾。 - 請嘗試使用
Open C# Project
或Edit / Preferences / External tools / Regenerate Project files
重新建立專案/方案。 - 請確定您已在 Visual Studio 中安裝 Game/Unity 工作負載。
- 請嘗試清除 MEF 快取,如這裡所述。
- 請嘗試重新安裝 Visual Studio (僅使用 Game/Unity 工作負載啟動)。
- 請嘗試在
Tools / Extensions
中停用協力廠商延伸模組,以防止它們干擾 Unity 延伸模組。
額外重新載入,或 Visual Studio 遺失所有開啟的視窗
請務必不要再直接從資產處理器或任何其他工具處理專案檔。 如果您真的需要操作專案檔,我們會公開它的 API。 請參閱組件參考問題一節。
如果您發生額外重新載入,或如果 Visual Studio 在重新載入中遺失所有開啟的視窗,請確定您安裝了正確的 .NET 目標套件。 如需架構的詳細資訊,請參閱下節。
偵錯工具不會因例外狀況而中斷
使用舊版的 Unity 執行階段 (.NET 3.5 對等項目) 時,偵錯工具一律會在例外狀況未處理時 (= 在 try/catch 區塊之外) 時中斷。 如已處理例外狀況,偵錯工具就會使用 [例外狀況設定] 視窗判斷是否有必要中斷。
使用新的執行階段 (.NET 4.6 對等項目),Unity 推出管理使用者例外狀況的新方法,結果讓所有的例外狀況都被視為「使用者已處理」,即使它們是在 try/catch 區塊之外。 這就是為什麼如果您現在想要中斷偵錯工具,就需要在 [例外狀況設定] 視窗中明確勾選它們。
在 [例外狀況設定] 視窗中 ([偵錯] > [Windows] > [例外狀況設定]),展開例外狀況分類節點 (例如,表示 .NET 例外狀況的 [Common Language Runtime 例外狀況]),並選取要在該分類內擷取的特定例外狀況 (例如 System.NullReferenceException) 的核取方塊。 您也可以選取例外狀況的整個類別。
使用 Windows 時,Visual Studio 會要求下載 Unity 目標 Framework
使用舊版 Unity 執行階段 (對等 .NET 3.5) 時,Visual Studio Tools for Unity 需要 .NET Framework 3.5,但 Windows 8 或 Windows 10 上預設為未安裝。 若要修正這個問題,請遵循指示下載並安裝 .Net Framework 3.5。
使用新的 Unity 執行階段時,視 Unity 版本而定,也需要 .NET 以 4.6 或 4.7.1 版的套件為目標。 使用 Visual Studio 安裝程式有可能快速安裝它們 (修改您的安裝、個別元件、.NET 分類、選取所有 4.x 目標套件)。
組件參考或專案屬性問題
如果您的專案參考很複雜,或您想更妥善控制這個產生步驟,則可以使用我們的 API 來操作產生的專案或方案內容。 您也可以在 Unity 專案中使用回應檔,我們即會進行處理。
使用最近的 Visual Studio 和 Unity 版本,最佳方法似乎是使用自訂的 Directory.Build.props
檔案搭配您產生的專案。 然後,您就能夠參與專案結構,而不會干擾產生程序。
中斷點與警告
如果 Visual Studio 找不到特定中斷點的來源位置,中斷點周圍即會顯示警告。 請檢查您正在使用的指令碼是否已正確載入/用於目前的 Unity 場景中。
未達到的中斷點
請檢查您正在使用的指令碼是否已正確載入/用於目前的 Unity 場景中。 結束 Visual Studio 和 Unity,然後刪除所有產生的檔案 (*.csproj、*.sln)、.vs
資料夾和整個程式庫資料夾。 您可以在 Unity 網站上找到 C# 偵錯的詳細資訊。
無法偵錯 Android 播放器
我們使用多點傳送進行播放器偵測 (這是 Unity 所使用的預設機制),在此之後,我們會使用一般的 TCP 連線來附加偵錯工具。 對 Android 裝置來說,偵測階段是 主要問題。
WiFi 很靈活,但因為延遲,所以相較於 USB 速度超慢。 我們發現針對某些路由器或裝置 (Nexus 系列是其中的已知裝置) 缺乏適當的多點傳送支援。
USB 偵錯的速度超快,而且 Visual Studio Tools for Unity 現已可偵測 USB 裝置,與 adb 伺服器通訊以正確轉送連接埠來進行偵錯。
IntelliSense 或程式碼色彩的問題
請嘗試將 Visual Studio 升級為最新版本。 嘗試與 不相容專案 相同的疑難排解步驟。
已知問題
Visual Studio Tools for Unity 在偵錯工具如何與 Unity 的舊版 C# 編譯器互動方面有已知問題。 我們正在努力協助修正這些問題,在此同時,您可能會遇到下列問題:
偵錯時,Unity 有時會損毀。
偵錯時,Unity 有時會凍結。
逐步執行和跳離方法有時運作異常,尤其是在 iterator 或 switch 陳述式內。
報告錯誤
當您遇到損毀、凍結或其他錯誤時,請傳送錯誤報告,以協助我們改善 Visual Studio Tools for Unity 的品質。 這可協助我們調查並修正 Visual Studio Tools for Unity 的問題。 感謝您!
如何在 Visual Studio 凍結時回報錯誤
根據報告,當使用 Visual Studio Tools for Unity 進行偵錯時,Visual Studio 有時會凍結,不過我們需要更多資料來了解這個問題。 您可以執行下列步驟來協助我們進行調查。
回報使用 Visual Studio Tools for Unity 進行偵錯時 Visual Studio 凍結的情形
在 Windows 上:
開啟新的 Visual Studio 執行個體。
開啟 [附加至處理序] 對話方塊。 在新的 Visual Studio 執行個體的主功能表上,選擇 [偵錯] 、[附加至處理序] 。
將偵錯工具附加至 Visual Studio 的已凍結執行個體。 在 [附加至處理序] 對話方塊中,從 [可使用的處理序] 資料表選取 Visual Studio 的已凍結執行個體,然後選擇 [附加] 按鈕。
暫停偵錯工具。 在 Visual Studio 新執行個體的主功能表上,選擇 [偵錯]、[全部中斷],或直接按 Ctrl+Alt+Break。
建立執行緒傾印。 在命令視窗中輸入下列命令,然後按 Enter 鍵:
Debug.ListCallStack /AllThreads /ShowExternalCode
您可能需要先顯示 [命令] 視窗。 在 Visual Studio 主功能表上,選擇 [檢視] 、[其他視窗] 、[命令視窗] 。
在 Mac 上:
開啟終端機,並取得 Visual Studio for Mac 的 PID:
ps aux | grep "[V]isual Studio.app"
啟動 lldb 偵錯工具:
lldb
使用 PID 附加至 Visual Studio for Mac 的執行個體:
process attach --pid THE_PID_OF_THE_VSFM_PROCESS
擷取所有執行緒的堆疊追蹤:
bt all
最後,將執行緒傾印傳送至 vstusp@microsoft.com,並提供您在 Visual Studio 變成凍結時所執行的動作描述。