Sdílet prostřednictvím


Řešení potíží a známé problémy (Visual Studio Tools for Unity)

V této části najdete řešení běžných problémů se sadami Visual Studio Tools for Unity, popisy známých problémů a dozvíte se, jak můžete pomoct vylepšit nástroje Visual Studio Tools for Unity tím, že nahlásíte chyby.

Řešení potíží s připojením mezi Unity a sadou Visual Studio

Potvrďte Editor Attaching , že je povolené nebo Code Optimization On Startup je nastavené na Debug

V nabídce Unity vyberte Edit / Preferences.

V závislosti na použité verzi Unity:

  • Potvrďte, že Code Optimization On Startup je nastaven na Debug.
  • Nebo vyberte External Tools kartu. Potvrďte, že Editor Attaching je zaškrtávací políčko povolené.

Další informace najdete v dokumentaci k předvolbě Unity.

Nejde připojit

  • Zkuste dočasně zakázat antivirový program nebo vytvořit pravidla vyloučení pro VS i Unity.
  • Pokuste se dočasně zakázat bránu firewall nebo vytvořit pravidla pro povolení sítí TCP/UDP mezi VS a Unity.
  • Některé programy, jako je Team Viewer, můžou kolidovat s detekcí procesů. Můžete se pokusit dočasně zastavit jakýkoliv další software, abyste zjistili, jestli něco změní.
  • Nepřejmenujte hlavní spustitelný soubor Unity, protože VSTU monitoruje pouze procesy Unity.exe.

Chybové ukončení sady Visual Studio

Příčinou tohoto problému může být poškození mezipaměti MEF sady Visual Studio.

Zkuste odebrat následující složku a resetovat mezipaměť MEF (před tím zavřete Visual Studio):

%localappdata%\Microsoft\VisualStudio\<version>\ComponentModelCache

Tento problém by měl vyřešit. V případě, že problém přetrvává, spusťte vývojářský příkazový řádek pro Visual Studio jako Správa istrator a použijte následující příkaz:

 devenv /setup

Visual Studio přestane reagovat

Několik modulů plug-in Unity, jako jsou Parse, FMOD, UMP (Universal Přehrávač médií), ZFBrowser nebo Embedded Browser, používají nativní vlákna. Jedná se o problém, kdy modul plug-in nakonec připojí nativní vlákno k modulu runtime, který pak blokuje volání operačního systému. To znamená, že Unity nemůže přerušit toto vlákno ladicího programu (nebo opětovné načtení domény) a přestat reagovat.

Pro FMOD existuje alternativní řešení, můžete předat FMOD_STUDIO_INIT_SYNCHRONOUS_UPDATE příznak inicializace zakázat asynchronní zpracování a provést veškeré zpracování v hlavním vlákně.

Pokud vyvíjíte vlastní nativní modul plug-in, doporučujeme používat asynchronní volání procedur (APC) a zejména SleepEx, SignalObjectAndWait, MsgWaitForMultipleObjectsEx, WaitForMultipleObjectsEx, nebo WaitForSingleObjectEx funkce pro správnou spolupráci s Unity a Mono, pokud ladicí program potřebuje pozastavit vlákna.

Nekompatibilní projekt v sadě Visual Studio

Je velmi důležité vědět, že Visual Studio ukládá stav Nekompatibilní v nastavení projektu a nebude se pokoušet znovu načíst projekt, dokud explicitně nepoužijete Reload Project. Takže po každém kroku řešení potíží se ujistěte, že se pokusíte znovu otevřít řešení, a zkuste kliknout pravým tlačítkem na všechny nekompatibilní projekty a zvolit Reload Project.

  1. Zkontrolujte, jestli je sada Visual Studio nastavená jako váš editor externích skriptů v Unity pomocí Edit / Preferences / External Tools.
  2. V závislosti na verzi Unity:
    • Zkontrolujte, jestli je modul plug-in sady Visual Studio nainstalovaný v Unity. Help / About měla by se v dolní části zobrazit zpráva, jako je Microsoft Visual Studio Tools for Unity.
    • Unity 2020.x+: Zkontrolujte, jestli používáte nejnovější balíček editoru sady Visual Studio v Window / Package Managersouboru .
  3. Zkuste odstranit všechny projekty nebo soubory řešení a .vs složku v projektu.
  4. Zkuste znovu vytvořit projekty nebo řešení pomocí Open C# Project nebo Edit / Preferences / External tools / Regenerate Project files.
  5. Ujistěte se, že jste v sadě Visual Studio nainstalovali úlohu Game/Unity.
  6. Zkuste vyčistit mezipaměť MEF, jak je vysvětleno tady.
  7. Zkuste znovu nainstalovat Sadu Visual Studio (ke spuštění použijte úlohu Game/Unity).
  8. Pokuste se zakázat rozšíření třetích stran v případě, že by mohly kolidovat s rozšířením Unity v Tools / Extensions.

Opětovné načtení navíc nebo sada Visual Studio ztratí všechna otevřená okna

Nezapomeňte se nikdy dotýkat souborů projektu přímo z procesoru prostředků nebo jakéhokoli jiného nástroje. Pokud opravdu potřebujete manipulovat se souborem projektu, zveřejníme pro to rozhraní API. Projděte si část Problémy s odkazy na sestavení.

Pokud dojde k dalšímu načítání nebo pokud Sada Visual Studio při opětovném načítání ztratí všechna otevřená okna, ujistěte se, že máte nainstalované správné sady cílení na .NET. Další informace najdete v následující části o architekturách.

Ladicí program se při výjimkách nerušil.

Při použití starší verze modulu runtime Unity (ekvivalent .NET 3.5) se ladicí program vždy přeruší, když dojde k neošetřené výjimce (=mimo blok try/catch). Pokud je výjimka zpracována, ladicí program použije okno Výjimka Nastavení k určení, zda je přerušení povinné nebo ne.

S novým modulem runtime (ekvivalent .NET 4.6) zavedla Unity nový způsob správy výjimek uživatelů a v důsledku toho se všechny výjimky považují za "zpracovávané uživatelem", i když jsou mimo blok try/catch. To je důvod, proč je teď musíte explicitně zkontrolovat v okně Výjimka Nastavení, pokud chcete, aby ladicí program přerušil.

V okně Nastavení výjimky (ladění > výjimky systému Windows > Nastavení) rozbalte uzel pro kategorii výjimek (například Výjimky modulu CLR (Common Language Runtime Exceptions, což znamená výjimky .NET) a zaškrtněte políčko pro konkrétní výjimku, kterou chcete zachytit v rámci této kategorie (například System.NullReferenceException). Můžete také vybrat celou kategorii výjimek.

Visual Studio ve Windows požádá o stažení cílové architektury Unity.

Pokud používáte starší verzi modulu runtime Unity (ekvivalent .NET 3.5), visual Studio Tools for Unity vyžaduje rozhraní .NET Framework 3.5, které není ve výchozím nastavení nainstalované ve Windows 8 nebo 10. Pokud chcete tento problém vyřešit, stáhněte a nainstalujte rozhraní .NET Framework 3.5 podle pokynů.

Při použití nového modulu runtime Unity se vyžadují také balíčky cílení na .NET verze 4.6 nebo 4.7.1 v závislosti na verzi Unity. Pomocí instalačního programu sady Visual Studio je možné je rychle nainstalovat (upravit instalaci, jednotlivé komponenty, kategorii .NET, vybrat všechny sady cílení 4.x).

Problémy s referenčními informacemi o sestavení nebo vlastností projektu

Pokud je projekt složitý referenční nebo pokud chcete tento krok generování lépe řídit, můžete použít naše rozhraní API pro manipulaci s vygenerovaným obsahem projektu nebo řešení. Soubory odpovědí můžete použít také v projektu Unity a my je zpracujeme.

U nedávných verzí sady Visual Studio a Unity se zdá, že nejlepší přístup používá vlastní Directory.Build.props soubor spolu s vygenerovanými projekty. Pak budete moct přispívat do struktury projektu, aniž byste zasahovali do procesu generování.

Zarážky s upozorněním

Pokud Visual Studio nemůže najít zdrojové umístění pro konkrétní zarážku, zobrazí se kolem zarážky upozornění. Zkontrolujte, jestli je skript, který používáte, správně načtený nebo použitý v aktuální scéně Unity.

Zarážky se nenarazí

Zkontrolujte, jestli je skript, který používáte, správně načtený nebo použitý v aktuální scéně Unity. Ukončete Visual Studio i Unity a odstraňte všechny vygenerované soubory (*.csproj, *.sln), .vs složku a celou složku Knihovny. Další informace o ladění jazyka C# najdete na webu Unity.

Nejde ladit přehrávače Androidu

Pro detekci přehrávače používáme vícesměrové vysílání (což je výchozí mechanismus používaný Unity), ale po použití běžného připojení TCP k připojení ladicího programu. Fáze detekce je hlavním problémem pro zařízení s Androidem.

Wifi je všestranné, ale super pomalé ve srovnání s USB kvůli latenci. Viděli jsme nedostatek správné podpory vícesměrového vysílání pro některé směrovače nebo zařízení (nexus série jsou dobře známé pro toto).

USB je superrychlý pro ladění a Visual Studio Tools for Unity teď dokáže rozpoznat zařízení USB a komunikovat se serverem adb, aby správně předával porty pro ladění.

Problémy s IntelliSense nebo barvou kódu

Zkuste upgradovat sadu Visual Studio na nejnovější verzi. Zkuste stejný postup řešení potíží jako u nekompatibilních projektů.

Známé problémy

V nástrojích Visual Studio Tools for Unity existují známé problémy, které vyplývají z toho, jak ladicí program komunikuje se starší verzí kompilátoru jazyka C# Unity. Pracujeme na řešení těchto problémů, ale mezitím můžete zaznamenat následující problémy:

  • Při ladění se Unity někdy chybově ukončí.

  • Při ladění se Unity někdy zablokuje.

  • Krokování do a z metod se někdy chová nesprávně, zejména v iterátorech nebo v příkazech switch.

Hlášení chyb

Pomozte nám prosím vylepšit kvalitu visual studio tools for Unity odesláním zpráv o chybách, když dojde k chybovému ukončení, zablokování nebo jiným chybám. Pomůže nám to prozkoumat a opravit problémy v nástrojích Visual Studio Tools for Unity. Děkujeme

Jak nahlásit chybu při zablokování sady Visual Studio

Existují sestavy, které Visual Studio někdy zablokuje při ladění pomocí nástrojů Visual Studio Tools for Unity, ale potřebujeme k pochopení tohoto problému více dat. Můžete nám pomoct prozkoumat pomocí následujícího postupu.

Nahlášení zablokování sady Visual Studio při ladění pomocí nástrojů Visual Studio tools for Unity

Ve Windows:

  1. Otevřete novou instanci sady Visual Studio.

  2. Otevřete dialogové okno Připojit k procesu. V nové instanci sady Visual Studio v hlavní nabídce zvolte Ladit, Připojit k procesu.

  3. Připojte ladicí program k ukotvené instanci sady Visual Studio. V dialogovém okně Připojit k procesu vyberte z tabulky Dostupné procesy ukotvenou instanci sady Visual Studio a pak zvolte tlačítko Připojit.

  4. Pozastavte ladicí program. V nové instanci sady Visual Studio v hlavní nabídce zvolte Ladit, Přerušit vše nebo stiskněte kombinaci kláves Ctrl+Alt+Break.

  5. Vytvořte výpis stavu vlákna. V příkazovém okně zadejte následující příkaz a stiskněte Enter:

    Debug.ListCallStack /AllThreads /ShowExternalCode
    

    Je možné, že budete muset nejdřív zviditelnit příkazové okno. V sadě Visual Studio v hlavní nabídce zvolte Zobrazit, Jiná okna, Příkazové okno.

Na Macu:

  1. Otevřete terminál a získejte PID Visual Studio pro Mac:

    ps aux | grep "[V]isual Studio.app"
    
  2. Spusťte ladicí program lldb:

    lldb
    
  3. Připojte se k instanci Visual Studio pro Mac pomocí PID:

    process attach --pid THE_PID_OF_THE_VSFM_PROCESS
    
  4. Načtěte trasování zásobníku pro všechna vlákna:

    bt all
    

Nakonec odešlete výpis vstusp@microsoft.comstavu vlákna a popis toho, co jste dělali, když se Visual Studio zablokovalo.

Viz také