Принудительно перезагрузить VS Soution Explorer при добавлении нового скрипта c # через Unity3d?

8

Когда я создаю C # script ( Create -> C# Script) через Unity3d или удаляю его из Unity3d- Visual Studioпоказывает мне окно с предупреждением.

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

это раздражает.

Есть ли способ заставить "ReloadAll" в обозревателе решений без окна?

Алексей Шиманский
источник

Ответы:

3

Итак, что мы имеем.

Разработчик из VS Tools for Unity team сказал, что это один из самых популярных голосовых запросов. И это на удивление нетривиально исправить, они работают над этим.

Однако я нашел какой-то сценарий, который можно использовать .. Я нашел его в сообществе русского единства .

Большое спасибо DbIMok . Также он выложил этот скрипт вчера на forum.unity3d.com

Нужно создать C # скрипт с именем as FileModDialogCloser.csи поместить его в Editorпапку. Вот код:

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;
        }
}

Удивление!

Он работает для создания и удаления сценариев C # через Unity.

Как видите, в коде есть строка keybd_event(0x0D, 0, 0, 0);. Это симуляция нажатия Enterкнопки. А это означает перезагрузку реализации. если вам нужен ReloadAll, то вы должны сделать так:

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

Это нажатие Tabкнопки, а затем Enter.

НЕБОЛЬШОЙ ОТКАЗ: Когда вы создаете / удаляете скрипт: открывается окно подтверждения, запускается keybd_event, окно закрывается. Это происходит очень быстро, поэтому вам не нужно нажимать какие-либо кнопки. Но вы все равно можете увидеть это окно за несколько миллисекунд. Я думаю, что пока нет лучшего способа сделать это.


ДОПОЛНИТЕЛЬНО:

Вы можете создать скрипт C # для проектов Unity (а не просто скрипт C #) внутри Visual Studio. Unityдобавит файл автоматически без окна подтверждения.

Первый способ (просто) :

Если я правильно понял: когда вы используете Visual Studio Tools for Unity- этот инструмент уже интегрирует шаблоны для создания сценариев Unity C # в VS. Итак, щелкните правой кнопкой мыши на Решение и выберите Add -> NewItem. Вы можете увидеть два шаблона для Unity:

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

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

Тем не менее, эти шаблоны можно содержит много ненужной информации, комментарии, например // Use this for initialization, и // Update is called once per frameт.д. И, как @wondra в комментариях сказал : вы можете добавить собственный шаблон пользовательского элемента для сценариев единства.

Второй метод :

  • Создание файла из любого места.

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

  • Добавляем что хотите или удаляем что-то, или пример:

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

  • щелчок File -> ExportTemplate

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

  • выбирать ItemTemlate

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

  • Проверьте свой шаблон в списке

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

  • Нажмите Next,Next
  • Установите название и описание для шаблона, нажмите Finish

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

  • Шаблон будет добавлен в c:\Users\YOUR_PROFILE\Documents\Visual Studio 2015\My Exported Templates\папку, также в c:\Users\YOUR_PROFILE\Documents\Visual Studio 2015\Templates\ItemTemplates\. После VSперезагрузки вы можете увидеть этот шаблон в списке так же, как VS Tools for Unityшаблоны:

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

Вот объяснение видео .


Счастливый конец!

Алексей Шиманский
источник
0

Вы можете добавить новый скрипт прямо в Visual Studio в нужном вам каталоге в Unity. В этом случае вам не нужно будет перезагружать. введите описание изображения здесь

Но вам придется сделать что-то еще. Новый скрипт в Visual Studio будет иметь несколько пространств имен, которые используются по умолчанию. Вы можете изменить или удалить их. using UnityEngine;Сначала вам нужно будет добавить привилегии, связанные с Unity. Вы должны будете добавить void Start()или void Update()самостоятельно, если вам нужно. Новый класс должен выглядеть так: введите описание изображения здесь

Сурав Павел
источник
1
Спасибо, я это знаю. Но иногда я хочу создавать / удалять скрипты в Unity
Алексей Шиманский
1
Вам не нужно добавлять с помощью UnityEngine или start () / stop () вручную, вы можете добавить собственный шаблон элемента для скриптов Unity.
Вондра