¿Forzar recarga VS Soution Explorer al agregar un nuevo script de C # a través de Unity3d?

8

Cuando creo C # guión ( Create -> C# Script) a través Unity3d o borrarlo de Unity3d- Visual Studiome muestra la ventana de advertencia.

ingrese la descripción de la imagen aquí

es molesto.

¿Hay alguna forma de forzar "ReloadAll" en el Explorador de soluciones sin la ventana?

Alexey Shimansky
fuente

Respuestas:

3

Entonces, lo que tenemos.

El desarrollador VS Tools for Unity team dijo que es una de sus solicitudes de funciones más votadas. Y sorprendentemente no es trivial arreglarlo, están trabajando en ello.

Sin embargo, encontré un script que puede usar ... Lo encontré en la comunidad de la unidad rusa .

Muchas gracias a DbIMok . También publicó este script ayer en forum.unity3d.com

Necesita crear un script C # llamado como FileModDialogCloser.csy ponerlo en la Editorcarpeta. Aquí está el código:

using System;
using System.Runtime.InteropServices;
using UnityEditor;

[InitializeOnLoad]
public class FileModDialogCloser {

        [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
        static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);

        [DllImport("user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        [DllImport("user32.dll")]
        static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

        const string search = "File Modification Detected";
        static IntPtr hwnd;

        static void Check() { 
                hwnd = FindWindowByCaption(IntPtr.Zero, search);
                if ((int)hwnd != 0) {
                        ShowWindow(hwnd, 5);
                        keybd_event(0x0D, 0, 0, 0);
                }
        }

        static FileModDialogCloser() {
                EditorApplication.update += Check;
        }
}

Preguntándose!

Funciona para crear y eliminar scripts de C # a través de Unity.

Como puede ver, el código tiene una línea keybd_event(0x0D, 0, 0, 0);. Esto es simular presionar el Enterbotón. Y eso significa realización de recarga . si necesita ReloadAll, entonces tiene que hacer así:

keybd_event(0x09, 0, 0, 0);
keybd_event(0x0D, 0, 0, 0);

Esto es presionar el Tabbotón y luego Enter.

FALLA PEQUEÑA: Cuando está creando / eliminando script: la ventana de confirmación se abre, se ejecuta keybd_event, la ventana se cierra. Sucede muy rápido, por lo que no necesita hacer clic en ningún botón. Pero puedes ver esta ventana en unos pocos milisegundos de todos modos. Creo que, por ahora, no hay mejor manera de hacerlo.


ADICIONALMENTE:

Puede crear una secuencia de comandos C # para proyectos de Unity (no solo una secuencia de comandos simple C #) dentro Visual Studio. Unityagregará el archivo automáticamente sin ventana de confirmación.

El primer método (simple) :

Si lo hice bien: cuando está usando Visual Studio Tools for Unity, esa herramienta ya está integrando plantillas para crear scripts de Unity C # en el VS. Entonces, haga clic derecho en Solución y elija Add -> NewItem. Puede ver dos plantillas para Unity:

введите сюда описание изображения

введите сюда описание изображения

Sin embargo, estas plantillas pueden contener mucha información innecesaria, comentarios, por ejemplo // Use this for initialization, // Update is called once per frameetc. Y, como dijo @wondra en los comentarios : puede agregar su propia plantilla de elementos personalizados para los scripts de la unidad.

El segundo método :

  • Crear archivo desde cualquier lugar.

введите сюда описание изображения

  • Agregar lo que quieras o eliminar smth., O ejemplo:

введите сюда описание изображения

  • Hacer clic File -> ExportTemplate

    введите сюда описание изображения

  • Escoger ItemTemlate

введите сюда описание изображения

  • Revisa tu plantilla en la lista

введите сюда описание изображения

  • Clic Next,Next
  • Establezca el nombre y la descripción de la plantilla, haga clic en Finish

введите сюда описание изображения

  • La plantilla se agregará a la c:\Users\YOUR_PROFILE\Documents\Visual Studio 2015\My Exported Templates\carpeta, también a c:\Users\YOUR_PROFILE\Documents\Visual Studio 2015\Templates\ItemTemplates\. Después de VSreiniciar, puede ver esta plantilla en la lista como VS Tools for Unityplantillas:

введите сюда описание изображения

Aquí está la explicación en video .


¡Final feliz!

Alexey Shimansky
fuente
0

Puede agregar el nuevo script directamente en Visual Studio en su directorio previsto en Unity. En ese caso, no necesitará volver a cargar. ingrese la descripción de la imagen aquí

Pero tendrás que hacer otra cosa. El nuevo script en Visual Studio tendrá algunos espacios de nombres que usaron el predeterminado. Puede cambiarlos o eliminarlos. Deberá agregar using UnityEngine;al principio los privilegios relacionados con Unity. Tendrá que agregar void Start()o void Update()usted mismo si lo necesita. La nueva clase debería verse así: ingrese la descripción de la imagen aquí

Sourav Paul
fuente
1
Gracias, lo se. Pero a veces quiero crear / eliminar guiones dentro de Unity
Alexey Shimansky
1
No tiene que agregar usando UnityEngine o start () / stop () manualmente, puede agregar su propia plantilla de elementos personalizados para los scripts de la unidad.
wondra