Как сделать чтобы скрипты unity открывались в visual studio

Обновлено: 05.07.2024

Когда я открываю скрипт для редактирования из Unity, запускаются и Visual Studio, и Monodevelop, в результате чего два экземпляра одного и того же решения открываются в двух разных редакторах скриптов.

В настоящее время я работаю с последней версией Unity 5.50fs (хотя я также сталкивался с этой проблемой в предыдущей сборке до установки последнего обновления Unity) в сочетании с Visual Studio Community Edition 2015 и Visual Studio Tools For Unity 2.3. 0.

У меня также есть внешний редактор сценариев VS в окне настроек Unity.

При изучении этой проблемы я наткнулся на ветку форума о ком-то, у кого возникла похожая проблема, где MD открывает вместо VS. Похоже, что это результат жестко закодированной ссылки на MD для избыточности в случаях, когда VS может не загружаться, что, как мне показалось, звучит как правдоподобное объяснение моей ситуации.

По общему мнению, когда VS открывается слишком долго, Unity возвращается к MD, полагая, что это проблема VS. Это объяснение кажется еще более вероятным в моем случае, потому что эта проблема возникает только тогда, когда я впервые открываю Unity на день - если у меня недавно была открытая VS, MD не открывается, а VS открывается довольно быстро, вероятно, в результате кэширования на моих компьютерах. память.

Обходной путь, предложенный, чтобы избежать запуска MD вместо VS в этом потоке, состоял в том, чтобы изменить имя исполняемого файла MD, чтобы Unity не могла запустить MD, давая VS время для завершения загрузки. Однако я надеялся найти лучшее решение. Мне нравится тот факт, что в Unity есть такая избыточность, и я бы предпочел сохранить ее без изменений, и я не знаю, почему, но изменение исполняемого файла исключительно для этой цели заставляет меня чувствовать себя немного невнятно.

Другие идеи, которые я пробовал, включают переустановку Unity, запуск Unity и VS в качестве администратора и запуск VS до открытия скрипта в Unity (в этом случае Unity открывает второй экземпляр VS).

Кто-нибудь еще испытывал оба редактора сценариев, запускаемых одновременно, и /или имел какие-нибудь другие идеи о том, как их решить? Это, очевидно, не критическая проблема или что-то еще, но это немного раздражает.

close

Чтобы завершить регистрацию, подтвердите свою почту!

close

отладка скрипта в Unity с использованием Visual Studio

Есть проект Unity. В процессе создания кода потребовалась пошаговая отладка. В Visual Studio в скрипте установил точку останова, запустил, как положено, подключение отладчика к Unity. Затем, запустил в редакторе Unity программу. В нужном месте сработала программа в точке останова. Теперь пошагово двигаюсь по коду скрипта в Visual Studio, все изменения в работе скрипта вижу, но в окне редактора никаких изменений не происходит. Вопрос так и должно быть? Если да, так что это за отладка. Если нет, тогда подскажите, что, я делаю нет так. Заранее благодарен.


Never Stop by Safetysuit w / lyrics (Свадебная версия)

Я совершил глупую ошибку и внутри void Update() вместо того, чтобы писать if(var) я написал while(var) и var никогда не изменялся внутри while, поэтому я закончил программирование бесконечного цикла внутри моего Update()

Сама история на самом деле не важна. Важно то, что я не мог остановить Play Mode. На самом деле я ничего не мог сделать с Unity, пока не перезапустил.

Итак, мой вопрос: знает ли кто-нибудь, как изящно остановить режим воспроизведения в Unity? Есть ли какой-нибудь ярлык или несколько строк кода для принудительного тайм-аута?

Я знаю, что лучший способ - избегать бесконечных циклов, но иногда можно допустить глупую опечатку.

Дополнительное примечание: Я долго искал решение этой проблемы, к сожалению, безуспешно. Однако я нашел решение побочного эффекта этой проблемы. Когда вы нажимаете ctrl-alt-del, вы можете потерять все, что вы не сохранили в своей сцене (что может быть часами работы).

Таким образом, Unity выполняет автоматическое сохранение, когда вы нажимаете кнопку воспроизведения, а резервная копия сцены находится в папке Temp folder , если вы не запустите Unity снова после принудительного выхода.

  • 4 Вы не можете этого сделать из самого Unity. Вы должны убить Unity из диспетчера задач, когда это произойдет. Опубликуйте код, вызывающий эту проблему, и вы, скорее всего, получите ответ.
  • Спасибо за ответ. На самом деле я сам обнаружил проблему, как я сказал в вопросе, я написал while () вместо if () в том, что для тестирования я все время оставлял истинным.
  • 1 Сам никогда не использовал его, но в магазине есть (платный) актив, чтобы остановить Unity в подобной ситуации.

Я только что попал в такую ​​ситуацию: случайный бесконечный цикл, застревание в режиме воспроизведения на сцене с несохраненной работой, Unity не отвечает.

Но мне посчастливилось открыть Monodevelop, хотя я в основном использовал Sublime для написания сценариев. Я нажал кнопку, чтобы начать отладку в левом верхнем углу окна Monodevelop, затем нажал кнопку паузы. Выполнение остановилось на строке в середине моего бесконечного цикла. Диспетчер задач Windows подтвердил, что Unity больше не блокирует ЦП.

(Unity 2017.4.1f1 Personal, Windows 10 Home x64, Monodevelop 5.9.6)

Следующее сработало для меня (реквизиты для @LinusR и, по расширению, @Kinxil). Это всего лишь быстрый шаг за шагом.

Это должно сработать для вас, если вы используете Visual Studio с инструментами Unity.

Найдите петлю:

  1. Откройте Visual Studio (если еще не открыто)
  2. Нажмите Присоединиться к Unity (если еще не прикреплен)
  3. Нажмите Сломать все (Пауза II символ)
  4. Открой Стек вызовов, Потоки а также Немедленно окна. (Все в Отладка Windows )
  5. Глядя на Стек вызовов, щелкните темы в Потоки окно.
  6. Остановитесь, когда найдете нить, в которой находится цикл. (Стек вызовов помогает в этом)
  7. Вы должны быть в потоке с циклом для выполнения необходимых команд в Немедленно окно.

А теперь вытащи меня отсюда !:

[Решение LinusR показалось самым пуленепробиваемым и универсальным.]

Разорвать цикл с нулевым значением и некоторыми другими параметрами

  1. в Немедленно window, установите для одного из обнуляемых объектов / полей / свойств, используемых в цикле, значение значение NULL например за Thread.SpinWait.SpinUntil(() => someObject.NeverTrue());
    • someObject = null;
    • Unity снова ответит в этом случае (при условии, что someObject остается нулевым).
  2. Альтернатива для НЕКОТОРЫЕ петли просто прерывает и изменяет инструкцию или значения и / или перетаскивает стрелку текущей инструкции (желтая стрелка) из цикла, хотя это может быть невозможно в зависимости от типа цикла.
    • Подумайте, как работает петля; Как часто это выполняется? Будет ли называться каждый кадр? и т.п.
  3. Ничего не работает? Прочтите другие ответы здесь, проявите творческий подход с Немедленное окно. Также в будущем было бы разумно иметь Ошибка Пауза всегда включен в Unity.

Для меня это сработало.

Как выйти из бесконечного цикла

Решение

  1. Присоедините свою IDE к Unity
  2. Приостановить выполнение
  3. Выйти из цикла
  4. При необходимости выполните Debug.Break (), чтобы предотвратить повторное включение цикла при следующем Update ()
  5. Возобновить выполнение
  6. Вернуться в редактор Unity

Для Visual Studio

(Я не тестировал другие IDE)

  1. Нажмите Прикрепить к Unity
  2. Подождите, пока процесс прикрепится (иногда это занимает некоторое время)
  3. Нажмите "Разбить все" (пауза II символ)
  4. Нажмите на меню Debug Windows Threads
  5. Щелкните ветку, содержащую ваш исходный код (см. Столбец местоположения)
  6. В исходном коде (текстовом редакторе) переместите указатель программы (желтая стрелка) за пределы цикла, перетащив его на другую строку исходного кода.

Необязательно в случае, когда цикл находится внутри некоторого события Update (), которое снова войдет в цикл:

  1. Нажмите на меню Debug Windows Immediate
  2. Тип UnityEngine.Debug.Break() внутри окна Immediate Window и нажмите Enter

Жаль, что Unreal Engine по большей части действительно хорош в обнаружении бесконечных циклов и выходе, когда они это делают, но Unity почти никогда этого не делает. Трудно понять, что происходит, потому что Debug.Log не срабатывает, пока кадр не завершится, поэтому вы не можете видеть, что происходит. Обходной путь, чтобы просто попытаться посмотреть, что происходит, - это использовать какой-то ограничитель вроде этого:

Конечно, это гораздо более простой пример, потому что while петли могут очень легко превратиться в бесконечные петли, но если у вас есть парк мячей, где это может происходить, вы можете установить там ограничитель.

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

Несколько дней назад у меня был бесконечный цикл, и я понятия не имел, где что-то пошло не так, поэтому я просто закомментировал код, а затем раскомментировал его, пока он снова не сломался, и смог выяснить, откуда он появился.


Очевидное, но важное напоминание: вы можете обновлять Microsoft Visual Studio независимо от Unity без риска нарушить работоспособность вашего проекта. Каждая новая версия Visual Studio всегда производительнее предыдущей версии как для Windows, так и для Mac, что поможет вам сэкономить ценное время. Обновление выполняется очень просто, а все действия можно увидеть в этом изображении.

You can avoid costly delays that come with cold launching Visual Studio by simply leaving the editor open. It will continue to synchronize your changes as you operate back and forth between Visual Studio and the Unity Editor.



Use CTRL+T (Windows) Shift+CMD+F (Mac) to search your entire project for anything.


При работе с длинными, объемными файлами может быть полезно настроить цвета и шрифты методов Unity API для быстрой идентификации.

Навигация между Unity и Visual Studio с помощью Unity Project Explorer

Unity Project Explorer — это надстройка над обозревателем решений с более понятным интерфейсом, которая позволяет просматривать папки проекта Unity. Это упрощает навигацию между Unity и Visual Studio.

Ускорение отладки кода Unity с помощью Attach and Play из Visual Studio

Вместо нажатия на кнопку Attach to Unity с последующим переключением на Unity, чтобы нажать кнопку Play, вы можете использовать конфигурацию Attach to Unity and Play, которая позволяет выполнить все действия за одно нажатие. Этот алгоритм прикрепит отладчик и запустит режим Play в Unity; вам не придется переключаться из IDE, что ускорит процесс отладки.


Легкость совместной работы с Visual Studio Live Share

Читайте также: