Программирование unity что это
Программирование в Unity для опытных программистов
В Unity скрипты можно использовать для разработки практически любого элемента игры или интерактивного контента с графикой реального времени. Unity поддерживает скрипты на C#, созданные в соответствии с одним из двух основных подходов: традиционным и широко использующимся объектно-ориентированным подходом и информационно-ориентированным подходом, который теперь тоже поддерживается в Unity в отдельных случаях благодаря нашему высокопроизводительному многопоточному стеку информационно-ориентированных технологий (DOTS).
Unity поддерживает C#, стандартный в отрасли язык программирования, в некоторой степени похожий на Java или C++.
По сравнению с C++, C# легче в изучении. Кроме того, он относится к категории языков «с управлением памятью», то есть он автоматически распределяет память, устраняет утечки и так далее.
Как правило C# удобнее C++, если вам нужно в первую очередь разработать игру, а потом уже работать над различными сложными аспектами программирования.
Вся интерактивность и игровой процесс в Unity строятся на основе трех фундаментальных блоков: объекты GameObject, компоненты и переменные.
Любой объект в игре является GameObject, будь то персонажи, источники света, спецэффекты, декорации и все остальное.
Компоненты
Игровые объекты сами по себе не имеют никакого поведения. Для того, чтобы объект начал работать, игровому объекту нужны различные атрибуты, добавляемые с помощью компонентов.
Компоненты (Component) определяют поведение игровых объектов, к которым они прикреплены, и управляют ими. Простой пример — создание источника света, включающее прикрепление компонента Light к GameObject (см. ниже). Таким же примером может быть добавление компонента Rigidbody к объекту, чтобы он мог падать.
Компоненты имеют ряд свойств или переменных, которые можно настроить в окне Inspector редактора Unity и/или с помощью скрипта. В примере выше к свойствам источника света относятся дальность, цвет и интенсивность.
В Unity есть множество самых разнообразных компонентов, но вы вскоре можете столкнуться с необходимостью создать собственный компонент для реализации своих алгоритмов. Это можно сделать с помощью скриптов, в которых описана ваша собственная игровая логика и поведение объектов, и которые затем прикрепляются к игровым объектам как компоненты. Каждый скрипт связывается с внутренними механизмами Unity путем реализации класса, производного от встроенного класса MonoBehaviour.
Компоненты на основе скриптов позволяют запускать игровые события, проверять объект на предмет столкновений, применять физические свойства, программировать реакцию на управление пользователя и многое другое. См. Unity Scripting API для дополнительной информации.
Традиционная модель «игровой объект — компонент» хорошо работает и сегодня, поскольку она проста как для программистов, так и других пользователей, а также удобна для создания интуитивных интерфейсов. Добавите компонент Rigidbody к объекту GameObject — он начнет падать, добавите компонент Light — GameObject начнет излучать свет. Все остальное также подчиняется этой простой логике.
При этом система компонентов создана на основе объектно-ориентированной платформы, что создает сложности для разработчиков при работе с кэшем и памятью развивающегося оборудования.
Компоненты и игровые объекты относятся к «тяжелым объектам C++». Все объекты GameObject имеют имя. Их компоненты представляют собой оболочки для C# поверх компонентов на C++. Это упрощает работу с ними, но может влиять на производительность, если они будут храниться в памяти без явной структуры. Объект C# может находиться на любом участке памяти. Объект C++ также может находиться в любом участке памяти. Группировка и последовательное размещение объектов в памяти отсутствуют. При каждой загрузке в центральный процессор для обработки объект приходится собирать по частям из разных участков памяти. Это может сильно замедлить загрузку, а оптимизация потребует много усилий.
Для решения этих проблем мы начали перерабатывать базовые системы Unity на основе высокопроизводительного, многопоточного стека информационно-ориентированных технологий или DOTS (в настоящее время в статусе предварительной версии).
DOTS позволяет вашей игре эффективно использовать все возможности новейших многоядерных процессоров. Стек состоит из следующих компонентов:
ECS — это новая система компонентов в составе DOTS; все традиционные объектно-ориентированные манипуляции над GameObject отражаются на экземпляре в новой системе. Название «Компонент» никак не изменилось. Важнейшее отличие — в структуре данных. Подробнее об этом можно узнать из статьи «О DOTS: Entity Component System».
Помимо того, что это улучшенный подход к написанию кода игры с точки зрения дизайна, ECS позволяет вам использовать систему задач C# Unity и компилятор Burst и тем самым полностью использовать преимущества современного оборудования.
Многопоточные системы DOTS помогают создавать игры для самых разных устройств и разрабатывать богатые игровые миры с большим числом элементов и сложными симуляциями. Производительный код, в свою очередь, снижает тепловыделение и продлевает время автономной работы мобильных устройств. Переход от объектно-ориентированного к информационно-ориентированному подходу упрощает вам многократное использование кода, а другим позволяет легче понять и дополнить его при необходимости.
Некоторые из технологий DOTS все еще находятся в статусе предварительной версии, поэтому мы советуем разработчикам использовать стек для решения отдельных вопросов производительности проекта, не строить на базе DOTS весь проект. См. раздел «Дополнительные ресурсы» в конце этой страницы, где указаны ссылки на ключевые ресурсы DOTS.
Настройка и отладка в Unity эффективна, потому что все переменные игрового процесса отображаются непосредственно в процессе игры, что позволяет менять их на лету без дополнительного программирования. Игру можно приостановить в любой момент или переходить от одного оператора к другому по очереди.
Вот несколько полезных ресурсов по оптимизации в Unity:
Наилучшие методики для общих случаев (включая подробные советы по оптимизации системы интерфейса Unity)
.NET — ранее в Unity использовалась реализация стандартной среды выполнения Mono с нативной поддержкой C#. Теперь Unity для MacOS поставляется с Visual Studio for Mac вместо MonoDevelop-Unity. Unity для Windows поставляется с Visual Studio.
Имейте в виду, что IL2CPP — это единственный вариант системы программирования проектов, предназначенных для iOS и WebGL.
Программистам понравится гибкость Unity, поскольку они могут расширять редактор собственными окнами аналогично Inspector, Scene или другим стандартным окнам редактора. Расширяя Unity собственными инструментами, вы можете настроить редактор в соответствии с особенностями рабочих процессов вашей студии для повышения эффективности.
Визуальное программирование
Система визуального программирования в Unity позволяет создавать игровую механику или логику взаимодействия с помощью визуальной графовой системы вместо работы с текстовым представлением кода.
Хотите как можно быстрее приступить к визуальному скриптингу? В этом кратком руководстве объясняются базовые принципы визуального скриптинга, которые помогут реализовать логику на основе графов для ваших собственных игр.
Начало работы в Unity 2021.1
Начиная с Unity 2021.1, система визуального программирования поставляется через Package Manager и устанавливается вместе с редактором Unity.
Начало работы с Bolt
Для Unity 2019 и 2020 LTS систему Bolt Visual Scripting можно загрузить из Unity Asset Store бесплатно.
Система визуального скриптинга в Unity позволяет любому сотруднику студии реализовать логику с помощью перетаскивания узлов вместо ручного ввода программного кода. Кроме того, эта система упрощает совместную работу программистов, художников и дизайнеров, ускоряя создание и проработку прототипов.
Визуальный скриптинг — это отличный инструмент для художников и дизайнеров, которые хотят проверить идею, внести изменения или лучше контролировать свою работу в Unity. Они также смогут воспользоваться графическим представлением логики, созданной сотрудниками технического профиля.
Разрабатывайте собственные узлы с помощью визуального скриптинга для эффективной совместной работы дизайнеров и художников. Это повышает удобство работы для всех сотрудников студии, независимо от их навыков в программировании.
Ключевые преимущества
Flow Graphs
Инструмент Flow Graphs — это главный инструмент реализации взаимодействий в проекте. С помощью графов действий и значений можно разрабатывать любую логику, реализуется ли она покадрово или срабатывает при событии.
State Graphs
Инструмент State Graphs позволяет создавать автономные алгоритмы, определяющие поведение объектов в зависимости от их состояния. Такие графы подходят для высокоуровневой логики, например, логика ИИ, сцены, уровня или любого другого аспекта сцены, требующего алгоритмов, сменяющих друг друга в различных состояниях.
Live Editing
Внесите изменения в схемы в режиме Play, и система обновит скрипт в реальном времени. Это значительно ускоряет итерацию и тестирование идей без необходимости компилировать изменения в проекте.
Отладка и анализ
Визуальный скриптинг предназначен для отображения значений в графе в игровом режиме с подсветкой выполняемых узлов. При возникновении ошибок во время выполнения их источник будет распознан и подсвечен в графе.
Разработано с упором на удобство использования
Благодаря продуманности правил наименования, комментирования и группировки, система визуального программирования имеет дружелюбный для пользователя без технических навыков интерфейс, что делает работу проще. А при возникновении трудностей инструмент Fuzzy Finder позволяет легко найти то, что вы ищете.
Совместимость кодовой базы
Система визуального скриптинга поддерживает использование в схемах любых методов, полей, атрибутов или событий Unity, а также любые сторонние плагины или даже ваши собственные скрипты. Благодаря прямому доступу системы к вашей кодовой базе все изменения кода тут же отражаются в интерфейсе.
Подробнее
Unity Learn
Этот полный курс Unity Learn поможет вам начать работу с системой визуального программирования.
Документация
Ознакомьтесь с документацией, чтобы узнать больше о визуальном программировании в Unity.
Сообщество
Примите участие в обсуждениях на форуме сообщества и следите за новостями визуального скриптинга в Unity.
Визуальный скриптинг — это способ манипуляции объектами и разработки алгоритмов в графическом интерфейсе Unity без написания кода. Логика реализуется узлами и связями между ними, что позволяет художникам, дизайнерам и программистам с легкостью прорабатывать игровой процесс и интерактивные системы.
Начиная с Unity 2021.1, система визуального скриптинга поставляется через Package Manager и устанавливается вместе с редактором Unity.
Для Unity 2019 и 2020 LTS систему Bolt Visual Scripting можно загрузить из Unity Asset Store бесплатно.
Unity Asset Store — это магазин с тысячами ассетов, доступных бесплатно или по разумной цене, которые экономят время и силы разработчикам в Unity. Это мощный ресурс для успешных Unity-разработчиков — он включает более 60 000 комплектов, содержащих инструменты и расширения для редактора, 2D- и 3D-графику, музыку кинематографического качества и звуковые эффекты, а также многое другое.
Инструмент Bolt Visual Scripting будет поддерживаться для проектов, созданных в Unity 2018, 2019 и 2020 LTS.
Начиная с Unity 2021.1, система визуального скриптинга будет входить в состав редактора Unity по умолчанию.
В настоящее время Unity проводит оценку возможных путей развития систем визуального программирования, включая Bolt, Bolt 2 и наше средство визуального программирования на основе DOTS. Мы хотим создать единое, тесно интегрированное решение, не приводящее к нарушению работы функций, не раскалывающее сообщество и в то же время соответствующее ожиданиям пользователей относительно готовности к использованию в разработке. Подробности о развитии визуального скриптинга можно узнать на нашем форуме.
Unity3d. Начало работы, практические советы. Рецензия
Доброго времени суток. Данная статья посвящена мультиплатформенному инструменту Unity3d. В статье рассмотрены оптимальные, по моему мнению, способы работы с движком, даны практические советы по эксплуатации и дополнительные (общие) сведения; рассмотрены перспективы развития Unity3d.
Содержание:
Раздел 1. Введение
Unity3d является современным кросс-платформенным движком для создания игр и приложений, разработанный Unity Technologies. С помощью данного движка можно разрабатывать не только приложения для компьютеров, но и для мобильных устройств (например, на базе Android), игровых приставок и других девайсов.
Поговорим немного о характеристиках движка. Во-первых, стоит отметить то, что в среду разработки Unity интегрирован игровой движок, иными словами, вы можете протестировать свою игру не выходя из редактора. Во-вторых, Unity поддерживает импорт огромного количества различных форматов, что позволяет разработчику игры конструировать сами модели в более удобном приложении, а Unity использовать по прямому назначению — разработки продукта. В-третьих, написание сценариев (скриптов) осуществляется на наиболее популярных языках программирования — C# и JavaScript [1].
Таким образом, Unity3d является актуальной платформой, с помощью которой вы можете создавать свои собственные приложения и экспортировать их на различные устройства, будь то мобильный телефон или приставка Nintendo Wii.
Для того чтобы создать свою игру, вам, как минимум, нужно владеть одним из доступных (на Unity) языков программирования: C#, JavaScript или Boo.
Будет прекрасно, если вы владеете, например, 3Ds max’ом, это вам сильно поможет при создании игры. Что касается меня, то мне пришлось освоить 3Ds max на базовом уровне, ибо нигде не мог найти нужную мне модель дома [3]. В любом случае вам понадобится установленный 3Ds max на ваш компьютер, если вы собираетесь импортировать готовые 3D модели. Ибо, в большинстве своем, необходимые модели имеют формат проекта, т.е. необходимо будет зарендерить их в соответствующий для Unity3d формат, например, в *.3DS, и только после этого делать импорт в Unity, в противном случае последний выдаст ошибку.
Раздел 2. Начало работы
Вспомогательная литература
Обратимся к литературе, которая поможет нам изучить Unity3d, а именно, к Unity 3.x Game Development Essentials [2]. Книгу в свободном доступе можно найти в гугле, если вы предпочитаете бесплатный контент.
О чем книга? Пожалуй, обо всем, что только нужно для создания полноценной игры. Настоятельно рекомендую приобрести данную книгу и изучить самостоятельно.
Пару слов об игре и содержании книги. Ваш игрок оказывается на необитаемом острове, ему необходимо спастись, для этого он выполняет различные задания и, будем надеяться, спасается. Игру можно пройти за пару минут, однако создание игры занимает далеко не пару минут, даже не пару часов, пожалуй.
Книга содержит очень подробное руководство по созданию игры «с нуля». В ней описано многое, что вам, скорее всего, понадобится для создания вашей игры.
Книга написана на английском языке; тем, кто не знает английский, будет не сложно интуитивно догадаться о чем идет речь, ибо написана книга без особых премудростей.
На это стоит обратить внимание
Приведу несколько советов при создании игры в Unity3d.
º Коллайдеры
Что это такое — коллайдер? Коллайдер — это область пространства, при взаимодействии с которой выполняются те или иные скрипты, действия. Чтобы лучше понять что это такое, представьте, что вы подходите к автоматически открывающимся дверям универмага. За пару метров от дверей, срабатывает датчик и двери распахиваются перед вами, но если вы пройдете за три метра, то ничего не произойдет. Как раз та зона, в которой действует датчик движения, отвечающий за открывание дверей, и есть коллайдер. Вы входите в зону — двери открываются, выходите из зоны — и датчик уже никак не будет реагировать на ваше присутствие. Точно так же и в игре.
Так вот, о коллайдерах. Предположим, мы импортировали в наш проект автомобиль и хотим сгенерировать для него коллайдер. Можно сгенерировать автоматически коллайдер для всего автомобиля, но тогда для каждой детали автомобиля — фары, уплотнителя, зеркала, покрышки — будет сгенерирован свой коллайдер.
Это абсолютно не оптимально. Безусловно, нам не нужно генерировать столь большое количество коллайдеров, достаточно ограничиться одним!
Обратите внимание, что это не тонкость. Стараться сэкономить память нужно везде. У вас есть какое-то место в игре, куда игрок не сможет попасть? Не генерируйте никакие коллайдеры для этого места вообще. У вас есть дверь, которую вы импортировали в проект из 3Ds max’а? Небось, она очень хорошо прорисована (сам сталкивался с тем, что у двери даже шурупы были прорисованы отдельным объектом), значит, создайте один box-коллайдер для всей двери — вы сэкономите много памяти! Поверьте, что вам эта сэкономленная память еще очень и очень пригодится.
º Оптимальная работа со сценами
Поговорим об оптимизации сцен, о самих же сценах будет речь вестись далее.
Представьте следующую ситуацию: у нас есть сцена «home» — когда игрок находится в здании и сцена «street» — когда игрок выходит из здания на улицу. Естественно, из второй сцены мы можем видеть дом, т.е. часть первой сцены, и наоборот (если, конечно, у здания есть окна). В таком случае оптимально следующее построение сцен. В первой сцене все, что касается улицы (т.е. того места, куда мы не можем попасть без перехода на другую сцену) надо максимально упростить. Иными словами, нам нужно оставить только внешний вид вида из окна, а всю начинку — распотрошить. Т.е. все коллайдеры удалить, разрешение и т.п. свести к минимуму. Действительно, зачем процессору напрягаться с обработкой той местности, которую мы не можем посетить? Аналогичным образом поступаем со второй сценой («street»). В данном случае мы можем вообще все удалить из дома и оставить только его «коробку».
Вы хотите создать minimap? Пожалуйста, только избавьтесь от всех коллайдеров и снизьте разрешение, в таком случае ваша игра будет оптимальна.
Именно таким образом работа со сценами становится оптимальной. Еще раз отмечу, что это не тонкости, это серьезные вещи, которые требуют внимания создателя.
Сцены
Готовая игра — это набор сцен, соединенных между собой (точно так же, как и жизнь — это набор дней). Об оптимальном проектировании игры мы сейчас и поговорим.
Прежде чем создать свой проект — подумайте, что он должен в себя включать (какие сцены). Составьте список сцен (на листочке), обдумайте, что каждая сцена будет в себе содержать. Теперь постарайтесь каждую сцену разбить на подсцены, чем больше их будет, тем легче будет вашему ЦП. Конечно, не стоит перебарщивать с количеством сцен. Предположим, что ваш игрок находится в здании и из него никогда не выходит, в здании есть, например, пару этажей, крыша, а на каждом этаже имеется три комнаты. В данном случае, по моему мнению, было бы оптимально «разбить» здание на две сцены — два этажа и крыша. Дробление же каждого этажа на сцены с комнатами — не оптимально. Это просто не нужно, если каждая из комнат слабо загружена. Иными словами, надо грамотно расходовать память процессора, но и забывать о получении удовольствия от игры тоже не стоит.
Отладка
Помните, что хороший создатель должен учитывать то, что его игра, либо приложение, будет использоваться на различных ЭВМ, а это означает, что свой контент необходимо отладить так, чтобы он мог использоваться на различных устройствах. Самый очевидный и важный момент отладки — оптимизация приложения под различные разрешения экранов. Это важный момент и создатель игры обязательно должен обратить на него свое внимание, в противном случае, результатом своей работы сможет быть доволен только он один.
Структурирование
Раздел 3. Практические советы
Помните золотое правило: хорошая программа не та, которая написана тяп-ляп и отлажена до предела, хорошая программа та, которая пишется сразу правильно и требует минимальных «затрат» на отладку. Если вы будете пользоваться этим правилом, то у вас все будет намного лучше чем у тех, кто этим правилом не пользуется.
Написание скриптов
Увы, этот подраздел будет совсем короткий. Просто старайтесь сначала представить то, что вы хотите реализовать, затем попробуйте описать словами алгоритм, а далее — преобразовать слова в работающий код. Используя книгу, о которой речь шла выше, вам навряд ли придется сильно потеть над разработкой кодов и других вещей, повторюсь, что в книге описано практически все, что только может понадобиться, а все, что не описано — легко додумать самому.
Видеоуроки
К счастью, программный продукт Unity обновляется постоянно, но, увы, видеоуроки сами это делать не могут. Получается так, что огромное количество видеороликов, актуальных год назад, теряют свою актуальность и становятся, попросту, бесполезными.
1 — здесь вы всегда найдете актуальные видеоуроки, понятное объяснение, детальный разбор скриптов и всех действий. Лучше этого канала пока что ничего не нашел. Если вы не имеете вообще никакого представления о создании игры, то вам однозначно нужно заглянуть на данный канал. 2 — серьезная команда, видеоуроков только, жаль, меньше, чем у 1. 3 — есть полезные вещи, жаль только, что видеоуроки стали почти неактуальными.
Устранение ошибок
Unity3d — такой движок, что если у вас имеются ошибки в написании скриптов, то игра ваша не запустится. Если же нет явных ошибок, то игра запускается, если что-то идет не так, то консоль вам об этом обязательно сообщит.
Это предупреждения, они просто говорят вам о возможных недочетах, недоработках:
Это ошибки, если такие имеются, то игра не запустится:
Раздел 4. Завершение работы
Выводы
Unity3d — очень гибкий движок, предоставляющий большую свободу действий пользователю. Чтобы упростить жизнь разработчику и потребителю, можно предпринять некоторые шаги для оптимизации своего проекта.
Теперь мы, с заложенной базой знаний, можем спокойно приступать к созданию своего ультра-популярного приложения!
Публикация игры
Свою готовую игру можно опубликовать на одном из игровых сервисов, например, на www.kongregate.com
*Оптимизация
Если вы читаете данный подраздел, то либо вам просто интересно, что здесь написано, либо вы не прочитали NB! из раздела 2. Будем надеяться, что вы относитесь к первой категории. В данном подразделе еще раз хочется отметить то, что нужно сразу писать игру оптимальной, а не писать ее хоть как-то, и только затем отлаживать — это гиблый путь и поступать так не стоит. По поводу оптимизации — еще раз обратитесь ко второму разделу.
Раздел 5. Дополнительная информация
Теория графики
Практика без теории бывает не очень уж и интересной, поэтому советую ознакомиться с теорией компьютерной графики. www.intuit.ru/department/graphics/graphalg/lit.html
Протестировать свои теоретические знания можно тут www.intuit.ru/department/graphics/graphalg
Полезные ссылки
Мнение
Unity3d действительно мощный движок [4], с помощью которого можно создавать настоящие, работающие игры. Однако, как и у любого программного продукта, у него есть, по моему мнению, свои недостатки.
º 2D графика
Считаю, что это самый главный провал Unity. Полное отсутствие нормальной, адекватной работы с 2D графикой. Имеется ввиду создание 2D-игр. Создать такую игру можно, но придется сильно напрягаться и извращаться. Если разработчики Unity смогут доработать этот недостаток, то, это будет очень и очень хорошо.
º Префабы
Хотелось бы видеть больше префабов, каких-то готовых вещей, объектов, например, домов, предметов элементарного интерьера — столов, стульев. Да, это все есть в магазине Unity[5], но, увы, многие вещи там платны, а бесплатные продукты лишь изредка достойны внимания. Отдельный разговор про 3rd person controller — извините, но это просто неприемлемо:
º Оптимизация изображения
Хотелось бы, чтобы работа с оптимизацией изображения под различные разрешения экрана была проще. Ведь достаточно чуть-чуть поработать с преобразованием координат и тогда не надо будет задумываться о том, что надо вычислять размеры, координаты через размер (разрешение) экрана.