Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En esta sección encontrará soluciones a problemas comunes con Visual Studio Tools para Unity y descripciones de problemas conocidos. Asimismo descubrirá cómo puede ayudar a mejorar Visual Studio Tools para Unity mediante la notificación de errores.
Solución de problemas de conexión entre Unity y Visual Studio
Confirme que Editor Attaching está habilitado o Code Optimization On Startup está establecido en Debug
En el menú de Unity, seleccione Edit / Preferences.
Según la versión de Unity usada:
- Confirme que
Code Optimization On Startupestá establecido enDebug. - O bien seleccione la
External Toolspestaña. Confirme que laEditor Attachingcasilla está habilitada.
Para más información, consulte la documentación sobre las preferencias de Unity.
Imposibilidad de efectuar la asociación
- Intente deshabilitar temporalmente el antivirus o cree reglas de exclusión para VS y Unity.
- Intente deshabilitar temporalmente el firewall o cree reglas que permitan redes TCP/UDP entre VS y Unity.
- Algunos programas como TeamViewer, pueden interferir con la detección de procesos. Puede intentar detener temporalmente cualquier software adicional para ver si cambia algo.
- No cambie el nombre del archivo ejecutable principal de Unity, ya que VSTU solo supervisa procesos con el nombre "Unity.exe".
Bloqueo de Visual Studio
Este problema puede deberse a que la caché de MEF de Visual Studio está dañada.
Intente quitar la carpeta siguiente para restablecer la caché de MEF (cierre Visual Studio antes de hacerlo):
%localappdata%\Microsoft\VisualStudio\<version>\ComponentModelCache
Esto debería resolver el problema. En caso de que siga experimentando el problema, ejecute un símbolo del sistema para desarrolladores de Visual Studio como administrador y use el comando siguiente:
devenv /setup
Visual Studio deja de responder
Varios complementos de Unity, por ejemplo, Parse, FMOD, UMP (Universal Media Player), ZFBrowser o Embedded Browser usan subprocesos nativos. Resulta problemático cuando un complemento acaba de asociar un subproceso nativo al runtime, que luego realiza llamadas de bloqueo al sistema operativo. Esto significa que Unity no puede interrumpir ese subproceso del depurador (o recarga del dominio) y deja de responder.
En el caso de FMOD hay una solución alternativa, puede pasar la marca de inicialización FMOD_STUDIO_INIT_SYNCHRONOUS_UPDATE para deshabilitar el procesamiento asincrónico y realizar todo el procesamiento en el subproceso principal.
Si va a desarrollar su propio complemento nativo, se recomienda usar llamadas a procedimientos asincrónicos (APC) y, especialmente las funcionesSleepEx, SignalObjectAndWait, MsgWaitForMultipleObjectsEx, WaitForMultipleObjectsExo WaitForSingleObjectEx para cooperar correctamente con Unity y Mono cuando el depurador necesita suspender subprocesos.
Proyecto no compatible en Visual Studio
Lo muy importante que debe saber es que Visual Studio guarda el estado "Incompatible" en la configuración del proyecto y no intentará volver a cargar un proyecto hasta que use Reload Projectexplícitamente . Por lo tanto, después de cada paso de solución de problemas, asegúrese de intentar volver a abrir la solución e intentar hacer clic con el botón derecho en todos los proyectos incompatibles y elegir Reload Project.
- Compruebe que Visual Studio está establecido como editor de scripts externo en Unity usando
Edit / Preferences / External Tools. - Según la versión de Unity:
- Compruebe que el complemento de Visual Studio está instalado en Unity.
Help / Aboutdebe mostrar un mensaje como Microsoft Visual Studio Tools para Unity está habilitado en la parte inferior. - Unity 2020.x+: compruebe que usa el paquete más reciente del Editor de Visual Studio en
Window / Package Manager.
- Compruebe que el complemento de Visual Studio está instalado en Unity.
- Pruebe a eliminar todos los proyectos o archivos de solución y la
.vscarpeta del proyecto. - Pruebe a volver a crear proyectos o soluciones mediante
Open C# ProjectoEdit / Preferences / External tools / Regenerate Project files. - Asegúrese de instalar la carga de trabajo Game/Unity en Visual Studio.
- Intente limpiar la memoria caché MEF como se explica aquí.
- Intente volver a instalar Visual Studio (con la carga de trabajo Game/Unity solo para iniciarse).
- Intente deshabilitar las extensiones de terceros en caso de que puedan interferir con la extensión de Unity en
Tools / Extensions.
Recargas adicionales o pérdida de todas las ventanas abiertas de Visual Studio
No toque nunca los archivos de proyecto directamente desde un procesador de recursos o cualquier otra herramienta. Si realmente necesita manipular el archivo de proyecto, hay una API para hacerlo. Consulte la sección Problemas de referencias de ensamblado.
Si se producen recargas adicionales o si Visual Studio pierde todas las ventanas abiertas al realizar una recarga, asegúrese de que dispone de los paquetes de compatibilidad de .NET apropiados. Consulte la sección siguiente sobre marcos de trabajo para más información.
El depurador no provoca una interrupción ante excepciones
Cuando se utiliza el runtime heredado de Unity (equivalente a .NET 3.5), el depurador siempre provocará una interrupción cuando una excepción no esté controlada (= fuera de un bloque try/catch). Si se controla la excepción, el depurador se basará en la ventana de configuración de excepciones para determinar si es necesaria una interrupción.
Con el nuevo runtime (equivalente a .NET 4.6), Unity introdujo una manera nueva de administrar las excepciones de usuario y, como resultado, todas las excepciones se consideran "controladas por el usuario" aunque estén fuera de un bloque try/catch. Por eso ahora hay que marcarlas explícitamente en la ventana de configuración de excepciones si se quiere que el depurador provoque una interrupción.
En la ventana Configuración de excepciones (Depurar > Ventanas > Configuración de excepciones), expanda el nodo de una categoría de excepciones (por ejemplo, Excepciones de Common Language Runtime, es decir, las excepciones. NET) y active la casilla de una excepción concreta que quiera capturar en esa categoría (por ejemplo System.NullReferenceException). También puede seleccionar una categoría de excepciones completa.
En Windows, Visual Studio le pide que descargue la plataforma de destino Unity
Al usar el entorno de ejecución de Unity heredado (equivalente a .NET 3.5), Visual Studio Tools para Unity requiere .NET Framework 3.5, que no está instalado de forma predeterminada en Windows 8 o 10. Para corregir este problema, siga las instrucciones para descargar e instalar .NET Framework 3.5.
Al usar el nuevo entorno de ejecución de Unity, los paquetes de destino de .NET versión 4.6 o 4.7.1 también son necesarios en función de la versión de Unity. Es posible usar el programa de instalación de Visual Studio para instalarlos rápidamente (modifique la instalación, busque los componentes individuales, categoría. NET, y seleccione todos los paquetes de compatibilidad 4.x).
Problemas de referencia de ensamblado o de propiedades de proyecto
Si el proyecto incluye referencias complejas o si se quiere controlar mejor este paso de generación, se puede usar nuestra API para manipular el contenido de la solución o el proyecto que se genera. También puede usar archivos de respuesta en el proyecto de Unity y los procesaremos.
Con las versiones recientes de Visual Studio y Unity, el mejor enfoque parece usar un archivo personalizado Directory.Build.props junto con los proyectos generados. A continuación, podrá contribuir a la estructura del proyecto sin interferir con el proceso de generación.
Puntos de interrupción con advertencia
Si Visual Studio no encuentra una ubicación de origen para un punto de interrupción concreto, aparecerá una advertencia en el punto de interrupción. Compruebe que el script que usa está cargado y se emplea correctamente en la escena actual de Unity.
Puntos de interrupción no ejecutados
Compruebe que el script que usa está cargado y se emplea correctamente en la escena actual de Unity. Salga de Visual Studio y Unity y elimine todos los archivos generados (*.csproj, *.sln), la carpeta .vs y la carpeta Library completa. Puede encontrar más información sobre la depuración de C# en el sitio web de Unity.
Imposibilidad de depurar reproductores de Android
La multidifusión se usa para la detección de reproductores (que es el mecanismo predeterminado que usa Unity), pero después se usa una conexión TCP normal para asociar el depurador. La fase de detección es el principal problema con dispositivos Android.
Wi-Fi es versátil, pero no ofrece la misma velocidad en comparación con USB debido a la latencia. Hemos visto una falta de compatibilidad de multidifusión adecuada en algunos enrutadores o dispositivos (por ejemplo, el caso de las series de Nexus).
Con USB se agiliza mucho la depuración, y Visual Studio Tools para Unity es ahora capaz de detectar dispositivos USB y comunicarse con el servidor adb para reenviar correctamente los puertos en la depuración.
Problemas de IntelliSense, o de colores de código
Pruebe a actualizar Visual Studio a la versión más reciente. Pruebe los mismos pasos de solución de problemas que para los proyectos incompatibles.
Problemas conocidos
Existen problemas conocidos en Visual Studio Tools para Unity que se deben a cómo interactúa el depurador con la antigua versión de Unity del compilador de C#. Estamos trabajando para ayudar a solucionar estos problemas, pero mientras tanto podría experimentar los siguientes problemas:
A veces, al depurar, Unity se bloquea.
A veces, al depurar, Unity se inmoviliza.
Al entrar y salir de métodos a veces se produce un comportamiento incorrecto, especialmente en iteradores o dentro de instrucciones switch.
Errores de informes
Ayúdenos a mejorar la calidad de Visual Studio Tools para Unity mediante el envío de informes de errores cuando experimente bloqueos, inmovilizaciones u otro tipo de errores. Esto nos ayudará a investigar y solucionar problemas en Visual Studio Tools para Unity. ¡Gracias!
Cómo informar de un error cuando Visual Studio se inmoviliza
Hay informes que indican que a veces Visual Studio se inmoviliza al depurar con Visual Studio Tools para Unity, pero necesitamos más datos para comprender este problema. Puede ayudarnos a investigarlo siguiendo los pasos indicados a continuación.
Para informar de que Visual Studio se inmoviliza durante la depuración con Visual Studio Tools para Unity
En Windows:
Abra una nueva instancia de Visual Studio.
Abra el diálogo Asociar al proceso. En la nueva instancia de Visual Studio, en el menú principal, elija Depurar, Asociar al proceso.
Asocie el depurador a la instancia inmovilizada de Visual Studio. En el diálogo Asociar al proceso , seleccione la instancia inmovilizada de Visual Studio en la tabla Procesos disponibles y, a continuación, elija el botón Asociar .
Pause el Depurador. En el menú principal de la nueva instancia de Visual Studio, elija Depurar, Interrumpir todo o simplemente presione Ctrl+Alt+Interrumpir.
Cree un volcado del subproceso. En la ventana Comandos, escriba el siguiente comando y presione Entrar:
Debug.ListCallStack /AllThreads /ShowExternalCodePuede que primero tenga que hacer visible la ventana Comando . En el menú principal de Visual Studio elija Vista, Otras ventanas, Ventana Comandos.
En Mac:
Abra un terminal y obtenga el PID de Visual Studio para Mac:
ps aux | grep "[V]isual Studio.app"Inicie el depurador LLDB:
lldbAsócielo a la instancia de Visual Studio para Mac con el PID:
process attach --pid THE_PID_OF_THE_VSFM_PROCESSRecupere el archivo stacktrace de todos los subprocesos:
bt all
Por último, envíe el volcado del subproceso a vstusp@microsoft.com, junto con una descripción de lo que estaba haciendo cuando Visual Studio se quedó inmovilizado.