Forçar Recarregar VS soution Explorer ao adicionar novo script c # via Unity3d?

8

Quando crio o script C # ( Create -> C# Script) por meio de Unity3d ou o excluo de Unity3d- Visual Studiome mostra a janela de aviso.

insira a descrição da imagem aqui

É irritante.

Existe alguma maneira de forçar "ReloadAll" na solução Explorer sem a janela?

Alexey Shimansky
fonte

Respostas:

3

Então, o que temos.

Desenvolvedor do VS Tools for Unity team disse que é um dos seus pedidos de recursos mais votados. E, surpreendentemente, não é trivial consertar, eles estão trabalhando nisso.

No entanto, encontrei algum script que pode ser usado. Encontrei-o na comunidade de unidades russas .

Muito obrigado ao DbIMok . Ele também postou este script ontem no forum.unity3d.com

Precisa criar o script C # nomeado como FileModDialogCloser.cse colocá-lo na Editorpasta Aqui está o 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;
        }
}

Perguntando!

Ele funciona para criar e excluir scripts C # via Unity.

Como você pode ver, o código tem uma linha keybd_event(0x0D, 0, 0, 0);. Isso é simular pressionando o Enterbotão. E isso significa recarregar a realização. se você precisar do ReloadAll , precisará fazer o seguinte:

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

Isso é pressionando o Tabbotão e depois Enter.

FALHA PEQUENA: Ao criar / excluir script: confirme se a janela é aberta, é executada keybd_event, a janela é fechada. Isso acontece muito rápido, então você não precisa clicar em nenhum botão. Mas você pode ver essa janela em alguns milissegundos de qualquer maneira. Eu acho que, por enquanto, não há melhor maneira de fazer isso.


ALÉM DISSO:

Você pode criar um script C # para projetos do Unity (não apenas um script C # simples) dentro Visual Studio. Unityadicionará o arquivo automaticamente sem janela de confirmação.

O primeiro método (simples) :

Se eu entendi direito: quando você está usando Visual Studio Tools for Unity- essa ferramenta já está integrando modelos para a criação de scripts do Unity C # no VS. Então, clique com o botão direito do mouse em Solution e escolhaAdd -> NewItem . Você pode ver dois modelos para o Unity:

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

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

No entanto, esses modelos podem conter muitas informações desnecessárias, comentários por exemplo // Use this for initialization , // Update is called once per frameetc. E, como o @wondra nos comentários disse : você pode adicionar um modelo de item personalizado para scripts de unidade.

O segundo método :

  • Criando arquivo de qualquer lugar.

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

  • Adicionando o que você quiser ou exclua smth., Ou exemplo:

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

  • Clique File -> ExportTemplate

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

  • Escolher ItemTemlate

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

  • Verifique seu modelo na lista

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

  • Clique Next,Next
  • Defina o nome e a descrição do modelo, clique em Finish

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

  • O modelo será adicionado à c:\Users\YOUR_PROFILE\Documents\Visual Studio 2015\My Exported Templates\pasta, também no c:\Users\YOUR_PROFILE\Documents\Visual Studio 2015\Templates\ItemTemplates\. Após a VSreinicialização, você poderá ver este modelo na lista, assim como os VS Tools for Unitymodelos:

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

Aqui está o explicação em vídeo .


Final feliz!

Alexey Shimansky
fonte
0

Você pode adicionar o novo script diretamente no Visual Studio no diretório desejado no Unity. Nesse caso, você não precisará recarregar. insira a descrição da imagem aqui

Mas você terá que fazer outra coisa. O novo script no Visual Studio terá alguns espaços para nome que usaram o padrão. Você pode alterá-los ou removê-los. Você precisará adicionar using UnityEngine;primeiro os privilégios relacionados ao Unity. Você terá que adicionar void Start()ou void Update()sozinho, se precisar. A nova classe deve se parecer com: insira a descrição da imagem aqui

Sourav Paul
fonte
11
Obrigado, eu sei disso. Mas às vezes eu quero criar / scripts de exclusão dentro da unidade
Alexey Shimansky
11
Você não precisa adicionar usando o UnityEngine ou start () / stop () manualmente, você pode adicionar um modelo de item personalizado para scripts de unidade.
Wondra