MonoDevelop
MonoDevelop — это интегрированная среда разработки (IDE), поставляемая вместе с Unity. IDE сочетает в себе функции текстового редактора с дополнительными возможностями для отладки и выполнения других задач по управлению проектами. Здесь не будет рассматриваться текстовый редактор, так как он достаточно интуитивен, но интеграция редактора и отладчика с Unity описана ниже.
Настройка MonoDevelop
MonoDevelop устанавливается по умолчанию вместе с Unity. Во время установки Unity на Windows, вы можете отменить установку MonoDevelop. Вы должны убедиться, что MonoDevelop установлен в качестве внешнего редактора скриптов в Preferences (меню: Unity > Preferences, а затем выберите панель External Tools). Если эта опция включена, Unity запустит MonoDevelop и будет использовать его в качестве редактора по умолчанию для всех скриптовых файлов.
Настройка отладчика
Чтобы включить отладку исходного кода (см. ниже для подробностей) в MonoDevelop, вам сперва следует проверить, что в Preferences, на панели External Tools включена опция Editor Attaching. Затем, вам следует синхронизировать ваш Unity проект с проектом MonoDevelop (меню: Assets > Sync MonoDevelop Project). Кроме того, убедитесь, что в BuildSettings целевой платформы (меню: File > Build Settings) включены опции Development Build и Script Debugging. Если вы собираете под WebPlayer, тогда вам следует дополнительно убедиться, что в контексте вашего проигрывателя выбран канал версий для разработчиков (правый клик в Windows или cmd-клик в Mac OSX).
Just before starting a debugging session, select the target you wish to debug from the target list next to the play button (Unity Editor, OSX Player, etc.). You can also select “Attach To Process”, this will show the full list of debuggable Unity processes.

With these steps completed, you are ready to being debugging your Unity scripts by clicking the play button.
Отладка исходного кода
Текущие открытые исходные файлы отображаются в MonoDevelop в виде вкладок и могут быть отредактированы как в стандартном текстовом редакторе. Также есть серая шкала точек останова (breakpoint bar) слева от панели редактора. Щелчок на этой шкале добавит так называемый маркер точки останова ( breakpoint ) напротив текущей строчки кода.

Добавление breakpoint’а на линию сообщает Unity, что по достижению этой линии во время Play Mode, следует приостановить выполнение скрипта. Когда скрипт так “замораживается”, вы можете использовать отладчик для определения того, что именно делает скрипт.

При приостановке выполнения на точке останова, во вкладках в нижней части окна MonoDevelop показывается информация о текущем состоянии выполнения. Возможно, наиболее важной из вкладок является Locals.

В этой вкладке показаны значения локальных переменных в текущей функции (псевдо-локальная переменная с именем this автоматически доступна в каждой функции, хоть она и не объявлена явно; это ссылка на текущий экземпляр скрипта, так что через “this” можно получить доступ ко всем переменным, объявленным в скрипте). Вы можете использовать точки прерывания вместе с вкладкой Locals для получения эффекта, аналогичного добавлению выражений print в ваш код — вы можете просматривать значения переменных в любой удобный вам момент времени. Однако во вкладке Locals вы также можете редактировать значения переменных. Это может оказаться полезным в случае, если вы нашли неверно установленную переменную и хотите проверить, пропадёт ли проблема при установке правильного значения.
Другая полезная функция MonoDevelop — пошаговое выполнение. Когда выполнение приостановится на точке останова, станет доступна шкала отладочных инструментов в верхней части окна MonoDevelop:-

Первые четыре кнопки известны как Continue (продолжить), Step Over (шаг через), Step In (шаг внутрь) и Step Out (шаг наружу) и могут срабатывать по командам из меню Run (самая правая кнопка, Detach может быть использована для окончания отладочной сессии). Continue продолжает выполнение до очередной точки останова. И Step Over и Step In выполняют одну строку кода в один момент времени. Различия между ними в том, что Step Over полностью выполняет любые функции за одну линию, а Step In позволяет “шагнуть” внутрь функции. Так зачастую можно случайно использовать Step In для корректно работающих функций, существует Step Out, который продолжит выполнение до конца текущей функции и остановится снова в коде, который её вызвал.
Детальное описание техник отладки исходного кода не подходит этому разделу, но существуют различные книги и web ресурсы, в которых можно найти все подробности по этой теме. Кроме того, проведение небольших экспериментов поможет почувствовать мощь этих инструментов и понять как их использовать для отслеживания основных типов ошибок.
Программирование в Unity для опытных программистов
В Unity скрипты можно использовать для разработки практически любого элемента игры или интерактивного контента с графикой реального времени. Unity поддерживает скрипты на C#, созданные в соответствии с одним из двух основных подходов: традиционным и широко использующимся объектно-ориентированным подходом и информационно-ориентированным подходом, который теперь тоже поддерживается в Unity в отдельных случаях благодаря нашему высокопроизводительному многопоточному стеку информационно-ориентированных технологий (DOTS).
На этой странице
- Если у вас есть опыт программирования на C++
- Объекты GameObject и компоненты
- Программирование компонентов в Unity
- Преимущества информационно-ориентированного подхода
- Современное оборудование
- Отладка в Unity
- Системы программирования в Unity
- Настройка редактора Unity
Знакомитесь с Unity, имея знания C++?
Unity поддерживает C#, стандартный в отрасли язык программирования, в некоторой степени похожий на Java или C++.
По сравнению с C++, C# легче в изучении. Кроме того, он относится к категории языков «с управлением памятью», то есть он автоматически распределяет память, устраняет утечки и так далее.
Как правило C# удобнее C++, если вам нужно в первую очередь разработать игру, а потом уже работать над различными сложными аспектами программирования.

Объекты GameObject и компоненты в Unity
Вся интерактивность и игровой процесс в Unity строятся на основе трех фундаментальных блоков: объекты GameObject, компоненты и переменные.
Любой объект в игре является GameObject, будь то персонажи, источники света, спецэффекты, декорации и все остальное.
Компоненты
Игровые объекты сами по себе не имеют никакого поведения. Для того, чтобы объект начал работать, игровому объекту нужны различные атрибуты, добавляемые с помощью компонентов.
Компоненты (Component) определяют поведение игровых объектов, к которым они прикреплены, и управляют ими. Простой пример — создание источника света, включающее прикрепление компонента Light к GameObject (см. ниже). Таким же примером может быть добавление компонента Rigidbody к объекту, чтобы он мог падать.
Компоненты имеют ряд свойств или переменных, которые можно настроить в окне Inspector редактора Unity и/или с помощью скрипта. В примере выше к свойствам источника света относятся дальность, цвет и интенсивность.
Программирование компонентов в Unity
В Unity есть множество самых разнообразных компонентов, но вы вскоре можете столкнуться с необходимостью создать собственный компонент для реализации своих алгоритмов. Это можно сделать с помощью скриптов, в которых описана ваша собственная игровая логика и поведение объектов, и которые затем прикрепляются к игровым объектам как компоненты. Каждый скрипт связывается с внутренними механизмами Unity путем реализации класса, производного от встроенного класса MonoBehaviour.
Компоненты на основе скриптов позволяют запускать игровые события, проверять объект на предмет столкновений, применять физические свойства, программировать реакцию на управление пользователя и многое другое. См. Unity Scripting API для дополнительной информации.

Преимущества информационно-ориентированного подхода с DOTS
Традиционная модель «игровой объект — компонент» хорошо работает и сегодня, поскольку она проста как для программистов, так и других пользователей, а также удобна для создания интуитивных интерфейсов. Добавите компонент Rigidbody к объекту GameObject — он начнет падать, добавите компонент Light — GameObject начнет излучать свет. Все остальное также подчиняется этой простой логике.
При этом система компонентов создана на основе объектно-ориентированной платформы, что создает сложности для разработчиков при работе с кэшем и памятью развивающегося оборудования.
Компоненты и игровые объекты относятся к «тяжелым объектам C++». Все объекты GameObject имеют имя. Их компоненты представляют собой оболочки для C# поверх компонентов на C++. Это упрощает работу с ними, но может влиять на производительность, если они будут храниться в памяти без явной структуры. Объект C# может находиться на любом участке памяти. Объект C++ также может находиться в любом участке памяти. Группировка и последовательное размещение объектов в памяти отсутствуют. При каждой загрузке в центральный процессор для обработки объект приходится собирать по частям из разных участков памяти. Это может сильно замедлить загрузку, а оптимизация потребует много усилий.
Для решения этих проблем мы начали перерабатывать базовые системы Unity на основе высокопроизводительного, многопоточного стека информационно-ориентированных технологий или DOTS (в настоящее время в статусе предварительной версии).
DOTS позволяет вашей игре эффективно использовать все возможности новейших многоядерных процессоров. Стек состоит из следующих компонентов:
- система задач C# для эффективного исполнения кода на многопоточных системах;
- Entity Component System (ECS) для разработки высокопроизводительного кода по умолчанию;
- компилятор Burst для компиляции скриптов в оптимизированный нативный код.
ECS — это новая система компонентов в составе DOTS; все традиционные объектно-ориентированные манипуляции над GameObject отражаются на экземпляре в новой системе. Название «Компонент» никак не изменилось. Важнейшее отличие — в структуре данных. Подробнее об этом можно узнать из статьи «О DOTS: Entity Component System».

Используйте все возможности современного оборудования
Помимо того, что это улучшенный подход к написанию кода игры с точки зрения дизайна, ECS позволяет вам использовать систему задач C# Unity и компилятор Burst и тем самым полностью использовать преимущества современного оборудования.
Многопоточные системы DOTS помогают создавать игры для самых разных устройств и разрабатывать богатые игровые миры с большим числом элементов и сложными симуляциями. Производительный код, в свою очередь, снижает тепловыделение и продлевает время автономной работы мобильных устройств. Переход от объектно-ориентированного к информационно-ориентированному подходу упрощает вам многократное использование кода, а другим позволяет легче понять и дополнить его при необходимости.
Некоторые из технологий DOTS все еще находятся в статусе предварительной версии, поэтому мы советуем разработчикам использовать стек для решения отдельных вопросов производительности проекта, не строить на базе DOTS весь проект. См. раздел «Дополнительные ресурсы» в конце этой страницы, где указаны ссылки на ключевые ресурсы DOTS.

Отладка в Unity
Настройка и отладка в Unity эффективна, потому что все переменные игрового процесса отображаются непосредственно в процессе игры, что позволяет менять их на лету без дополнительного программирования. Игру можно приостановить в любой момент или переходить от одного оператора к другому по очереди.
Вот несколько полезных ресурсов по оптимизации в Unity:
Наилучшие методики для общих случаев (включая подробные советы по оптимизации системы интерфейса Unity)
Как в unity поменять visual studio на monodevelop
Искать на сайте Unity
Роадмап MonoDevelop
22 октября 2015 г. через Технологии | 4 мин. читать

Расширить

Расширить
Охваченные темы
Поделиться
Версия MonoDevelop-Unity 5.9 будет выпущена в декабре вместе с Unity 5.3 в соответствии с нашим планом выпуска продуктов. Новая версия включает в себя значительное количество улучшений и исправлений для MonoDevelop 4.0.1

Расширить
В MonoDevelop-Unity 5.9 мы постарались усовершенствовать рабочий процесс. Теперь список выбора целевых объектов заполняется целевыми объектами Unity (выделены оранжевым цветом на рисунке). Присоединить выбранный целевой объект можно одним щелчком кнопки Run, поэтому не нужно каждый раз проходить диалог Attach to Process при запуске отладки.
Предварительную сборку MonoDevelop-Unity 5.9 можно скачать с нашего форума. Отзывы приветствуются. Эта версия устанавливается на Unity 4.6 и Unity 5, заменяя собой MonoDevelop 4.0.1. Системные требования приведены в теме по ссылке выше.
Исправления в отладочном процессе
Мы также исправили несколько ошибок, проявлявшихся в MonoDevelop-Unity и Visual Studio Tools for Unity во время отладки скриптов.
Важные исправления для Unity 5.3 и Unity 5.2.2:
- Исправлена ошибка пошаговой обработки операторов переключения.
- Исправлена ошибка с зависанием Unity в случае многократного шага, приводящего к прерыванию.
- Исправлена ошибка с зависанием Unity в случае, когда шаг производится после паузы.
- Исправлена ошибка при перешагивании Resources.Load и других методов Unity API, использующих сериализацию.
- Исправлена ошибка с аварийным прерыванием Unity при обработке универсальных методов, возвращающих универсальный массив: например, GameObject.GetComponents().
Помимо этого мы нашли и исправили ошибки, появившиеся во время разработки MonoDevelop 5.9:
- Сообщение «The requested item has been unloaded» при установке и снятии точки прерывания.
- Сообщение «The requested item has been unloaded» при обработке объектов перечисляемых типов.
- Ошибка «Debugger operation failed. Argument cannot be null».
Интеграция MonoDevelop и Unity с помощью REST
На данный момент сообщение между MonoDevelop и Unity осуществляется с помощью файлов разработок (.sln) и проектов (.csproj).
Это не слишком удобно, так как Unity приходится обновлять файлы проекта и разработки каждый раз, когда вносятся изменения (добавление, удаление, переименование) в файлы скриптов внутри проекта, а MonoDevelop приходится перезагружать эти файлы после их перезаписи. Предпочтительнее было бы прямое сообщение между Unity и MonoDevelop с реакцией на обновления Assets.
Кроме того, Unity и MonoDevelop используют различные компиляторы C# для сборки скриптов. Это может привести к тому, что Unity и MonoDevelop выдадут различные ошибки для одного и того же скрипта, или же скрипт соберется в одной среде, но не соберется в другой.
Поэтому мы работаем над интеграцией Unity и MonoDevelop с использованием REST. Наша цель — наладить прямое сообщение между MonoDevelop и Unity через сетевой интерфейс, чтобы избавиться от постоянного создания новых файлов проектов и разработок.
MonoDevelop будет отображать в своём окне структуру папки Assets, полученную от Unity в виде сообщения REST. Отображение будет изменяться в реальном времени. Операции с файлами, назначенные пользователем в этом окне, будут производиться не самим MonoDevelop: вместо этого будет отправлено сообщение REST в Unity, который и выполнит назначенные операции, после чего отправит обратное сообщение с новой структурой папки.
На следующем рисунке показано окно MonoDevelop с открытой структурой папки Assets. Вид окна может быть изменен до выпуска MonoDevelop-Unity 5.9.

Расширить
Кроме того, REST позволит MonoDevelop пересылать в Unity предназначенные к сборке скрипты и получать результаты сборки, что также показано на рисунке.
REST не ограничен операциями с файлами и компиллированием скриптов. Его можно использовать для любой другой функции, представленной как конечная точка REST в Unity.
Вот неполный список возможностей, открываемых интеграцией MonoDevelop c Unity с помощью REST:
- Синхронизация проектов и разработок между MonoDevelop и Unity без использования файлов.
- Мгновенная синхронизация операций с файлами в папке Assets в обоих направлениях.
- Согласованная сборка скриптов. Процесс сборки происходит в Unity, MonoDevelop получает результаты.
- Начало отладки и (или) присоединение отладчика к процессу по нажатию кнопки Play в MonoDevelop.
Интеграция Unity и MonoDevelop с помощью REST будет реализована в версии Unity 5.5. Следите за новостями.
Unity 5.2.2 changing Visual Studio back to MonoDevelop
Is there any way to change default script editor in unity to MonoDevelop? Using Visual Studio is very complicated and slow.
17.2k 11 11 gold badges 79 79 silver badges 127 127 bronze badges
asked Dec 27, 2015 at 1:03
1 Answer 1
- Open Unity, select a project then go to the top menu bar.
- Go to Edit -> Preferences -> External Tools -> External Script Editor.
- Then click the drop down menu and select MonoDevelop (built-in).
1,886 2 2 gold badges 20 20 silver badges 28 28 bronze badges
answered Dec 27, 2015 at 1:40
PlanetVaster PlanetVaster
507 1 1 gold badge 6 6 silver badges 18 18 bronze badges
I don’t have the «MonoDevelop (built-in)» in my dropdown. And using unity with VS Code is not working for me.
Jan 17, 2019 at 10:22
- c#
- visual-studio
- unity-game-engine
- monodevelop
-
The Overflow Blog
Related
Hot Network Questions
Subscribe to RSS
Question feed
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.11.15.1019
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
