на чем написан движок unity

Unity — бесплатный кроссплатформенный 3D движок (и браузерный тоже)

Преамбула

Итак, сегодня я хотел бы рассказать вам о Unity (тем, кто ещё не знаком с ним, по крайней мере). Безусловно, на Хабре есть люди, которые знают, что это такое, но поиск выдаёт катастрофически малое количество топиков с упоминанием сабжа — два из них просто сообщают о новых версиях, один кратко презентует и ещё один посвящен всё-таки его использованию. «Непростительно, надо это исправить!», — подумал я, и решил написать краткий презентейшн с целью популяризации технологии. Если вы уже в теме — дальше можете не читать.

Честно говоря, когда я читал на википедии о бесплатном (по крайней мере, с вполне нормальной по функционалу фришной лицензией) 3d движке с нормальным IDE, встроенной нормальной физикой, аудио-движком и прямой реализацией сетевого мультиплеера на котором можно делать приложения для всего, кроме, пожалуй, nix’ов (поддерживаются и нормально работают Windows, MacOS, Wii, iPhone, iPod, iPad, Android, PS3, XBox 360), я уже чуял подвох.

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

А когда я поставил это чудо себе и убедился в правдивости всего вышесказанного — я почти что влюбился.

Много раз на свет появлялись технологии, которые ставили перед собой цель перенести в интернет честное тридэ. Вспомним провальный VRML, чуть менее провальный ActiveWorlds… Сегодня о них почти никто не помнит. Скоро весь мир заполонит HTML5, выйдет новый флэш с 3d-ускорением… Но пока этого не случилось, миром мультимедийного контента в вебе правит текущая версия Flash, вместе с Java и Silverlight’ом. Пожалуй, даже только Flash. Разработчики со скрипом пользуются другими технологиями, оно и понятно — заставить пользователя поставить ещё один сторонний плагин лишь для того, чтобы поиграть в одну игру/посмотреть один сайт сложно.

Однако с релизом новой, третьей версии вышеупомянутого движка можно подумать и о том, чтобы пересмотреть свои взгляды на любимый флэш. В конце концов, если уж гиганты флеш-игрушек типа Kongregate обратили внимание на эту технологию (в частности, они объявили конкурс на лучшую игру на Unity) — она стоит хотя бы того, чтобы на неё посмотреть.

Pro et Contra

Для начала, определимся с терминами. Unity — это полноценный игровой движок, рассчитанный на то, что весь процесс девелопмента (ну, кроме подготовки ресурсов и скриптинга) будет происходить в поставляемом в комплекте Редакторе Всего. Обычно такая постановка вопроса означает нежизнеспособного монстра, обросшего тормознутым GUI по самое не балуйся, рассчитанного на то, чтобы дать подросткам из разряда «геймдев-ваннаби» почувствовать себя причастными к геймдеву. Но не стоит пока закрывать вкладку с этим топиком — Юнити не из этого теста. Итак, чем же хорош Юнити? Посмотрим, а заодно сравним с UDK — SDK к UnrealEngine 3, который Epic Games не так давно сделали бесплатным для независимых разработчиков.

Дело в том, что у большинства небольших команд основной проблемой всегда становился движок (ну и отсутствие идеи и хорошего арта конечно же, но мы сейчас не об этом). Писать с нуля — единственному программисту в команде сложно это сделать, учитывая что движок это не только 3d-рендер, это ещё и куча инструментов пайплайна — импортеры, редакторы, вьюверы… Непосильная задача, если только не придерживаться минимализма. Минимализм это не плохо, столько замечательных игр сделано во всеми нами любимом стиле 8-bit, что не счесть… Но большинство из них — однодневки (Minecraft не в счет, да. И он кстати тоже написан не с нуля, а на LWJGL). Когда дело доходит до игры, в которую будут играть не один день, нужен полноценный движок, и тогда мы начинаем искать бесплатные решения. Ogre, Irrlicht и немногие им подобные — хороши конечно, но а) морально стары и б) на их изучение и допиливание до работоспособного состояния требуют много времени и большую теоретическую базу за спиной. Конечно и на них можно написать крутой продаваемый проект (Torchlight на Ogre тому примером), но тут все-таки нужен не один программист. Есть и наборы а-ля «игры без знания языков программирования», типа GameMaker, но это игрушки, право слово.

В случае с Unity же мы имеем уже готовый пайплайн, готовый рендерер, готовую физ., аудио и сетевую библиотеки, кодить можно на знакомом языке — фактически, со стороны кодинга нам нужно только знать основы, допустим, Яваскрипта, и недельку покопаться в официальной справке, чтобы склепать FPS. Минус одна преграда на пути к релизу. Если кто не верит в качество написанного чужими руками кода, который нельзя поправить — зацените, все совсем не так плохо.

Как это выглядит

Прямо в IDE можно нажать кнопку «Play», и протестить текущую сцену реалтайм:

Встроенный инспектор классов прощупывает, простите за тавтологию, классы на предмет переменных и позволяет менять переменные в скриптах на лету, не глядя в код. Причем не только int’ы, но и материалы, текстуры, модели… Очень экономит время. В документации к API указывается хорошим тоном не писать, допустим, путь к текстуре напрямую в скрипте, а просто делать свойством класса пустое свойство соответстующего типа, и выбирать в инспекторе нужное:

Инспекторы префабов (справа) и энтитей (слева). Грубо говоря, справа — заготовки объектов, слева — те объекты, что есть в текущей сцене. Удобно, что во время прогона уровня в редакторе (кнопка «play»), можно поставить прогон на паузу и посмотреть текущее состояние объектов — гораздо реже приходится читать логи или выводить на HUD дебажную строку, чтобы посмотреть поведение одной маленькой переменной:

А напоследок я скажу.

Подытоживая весь словесный мусор до этого момента, если вы делаете ААА-проект, вы, скорее всего, напишите свой движок. Или у вас уже есть движок от прошлого проекта. Или вы купите что-то уровня пресловутого UnrealEngine 3 с исходниками. Но это если вы делаете ААА-проект с десятком людей только на кодинге.

Читайте также:  чем перетягивать живот после родов

Если же у вас всего десять человек в студии (а тем паче, два), писать свой движок, как правило, слишком затратно. Одно искушение оказаться на волне полноценных браузерных 3D-игр (java-обертка для Ogre не в счет. Ну правда же) стоит того, чтобы попробовать Unity на практике. Скорость и сложность разработки обычной браузерной казуалки на ней не выше, чем на Flash, а графическое превосходство — налицо. Да и wow-эффект никто пока что не отменял.

В конце концов, на Unity можно делать сайты (спорно, но можно), презентации, визуализировать научные проекты… Все это можно было написать и вручную, на чистом OpenGL, но сравнив время и качество реализации, я все-таки склоняюсь к варианту на Unity. Flash пока что тоже в расчёт не берём — подождем релиза аппаратного 3d-ускорения.

Такие слова вызовут бурю эмоций у приверженцев других движков. «Да это все есть и в %enginename%», «на %enginename% сделана %gamename% и %gamename%, и все это без мерзкого всепоглощающего drag’n’drop’а»…

Я посоветую вам просто дать Unity шанс — своим удобством, возможностями, гибкостью и скоростью разработки она подкупает (по крайней мере, меня подкупила). И кроме того… Эй, это же полноценное тридэ в браузере! 🙂

UPD: ghisguth справедливо напомнил про русскоязычное комьюнити (довольное большое и активное) и кладезь скриптов, а также кладезь юзерских скриптов и туториалов.

Источник

7 языков, на которых можно писать в Unity

Те кто знаком с Unity знают, что написание скриптов происходит при помощи языков C# и JavaScript. На самом деле языков куда больше и в статье мы расскажем вам об этом.

Движок поддерживает несколько популярных языков программирования, так что вам не придется учить новый язык с нуля. Нужно только выбрать один из языков, которыми уже владеете, «прокачать» его и можно начинать экспериментировать. Причем дело не сводится только к C#, нормально работать с Unity можно и с использованием JavaScript, Python и ряда других языков, на этом сегодня остановимся подробнее.

Если владеете этим языком программирования, то сможете использовать потенциал Unity на 100%. По сути, все библиотеки Unity написаны именно на C Sharp. В Unity используется Mono – open-source проект, являющийся одной из вариаций Microsoft. NET.

C Sharp – довольно простой в освоении язык, к тому же вам не нужно знать его досконально. Для работы с Unity достаточно базовых навыков. Его синтаксис схож с C++, Java, так что если владеете одним из этих языков, то освоить C Sharp будет еще проще.

В Unity в роли основного может быть несколько языков. Многое зависит от команды разработчиков, их целей.

Язык выпущен в 2011 г., автор – Родриго де Оливейра, этот же человек в прошлом активно работал над Unity. Синтаксис Boo – нечто среднее между IronPython и CPython, через настройку компилятора его можно сделать динамически-типизированным хотя по умолчанию он таковым не является.

Язык прост и удобен, синтаксис не перегружен сложными предложениями. В Unity он поддерживался до тех пор, пока над платформой работал его автор. Как только Оливейра ушел из команды, поддержка Boo была прекращена.

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

JavaScript

Наряду с C# был базовым языком Unity. В платформе использовался UnityScript, этот язык несколько отличается от классического JS. US правильнее было бы назвать специальной версией JavaScript синтаксис схож, но отличий хватает. Например, в US отсутствует возможность переназначения переменных, нельзя использовать необязательные точки с запятой.

До недавнего времени коды скриптов давались как на C#, так и на UnityScript. Но в последнее время от US команда Unity отказывается. Причем не просто прекратили его поддерживать, а активно переводят все скрипты на C# и в будущем UnitySript будет искоренен полностью. С середины 2017 г. авторам скриптов рассылается предупреждение о необходимости перевода кода в C#. Так что, если собрались изучать этот язык, лучше оставьте эту затею.

Обойти это ограничение можно через компилятор на GitHub, специально ограничивать использование JS в Unity никто не собирается. Но работать с таким «костылем» все же не так удобно.

Lua – довольно специфический язык с однообразным синтаксисом, широко используется разработчиками игр. Именно на Lua создана большая часть модов для World of Warcraft. В других проектах этот язык часто используется для написания AI.

Что касается Unity, то в платформе используется специальный интерпретатор MoonSharp, чтобы можно было подключить сторонний код, написанный на Lua. MoonSharp не стоит рассматривать как замену C#.

IronPython и IronRuby

Если сравнивать скорость и технические возможности, то Rust сопоставим с С++, язык не имеет проблем с безопасностью, скоростью и параллелизмом. В прошлом его называли неплохим вариантом для разработки ядер ОС.

В среднем 1.0-1.5% программистов регулярно используют Rust, пик популярности еще впереди, поэтому не стоит обращать внимания на столь незначительный процент. Функции и методы можно вызвать из Unity кода, но напрямую писать их не выйдет. Тем не менее, и такой уровень поддержки Rust отметить стоит.

Использование этих языков стало привычной практикой для проектов, в которых важна скорость и надежность работы. Это универсальный язык, используется не только в разработке игр, но и в разработке операционных систем, прикладного ПО – вариантов применения масса. В Unity поддержка этих языков реализована «из коробки», то есть можно сразу переходить к созданию плагинов.

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

Заключение

Если собрались работать в Unity, то придется освоить C#, игнорировать этот язык не получится. Зацикливаться только на нем не обязательно, платформа поддерживает разношерстные языки программирования, так что каждый найдет вариант себе по душе. Исключением является разве что JavaScript. От него команда Unity решила отказаться и в будущем US вряд ли вернется, так что его для работы с Unity изучать не стоит. В остальном ограничений нет, работать можно с любым из перечисленных языков.

Читайте также:  Форвардные пункты форекс что это

Источник

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 — извините, но это просто неприемлемо:

º Оптимизация изображения
Хотелось бы, чтобы работа с оптимизацией изображения под различные разрешения экрана была проще. Ведь достаточно чуть-чуть поработать с преобразованием координат и тогда не надо будет задумываться о том, что надо вычислять размеры, координаты через размер (разрешение) экрана.

Источник

Строительный портал