Какой язык программирования используется в unity

от admin

Программирование в 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 для дополнительной информации.

Демофильм Unity Megacity создан на основе 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».

Демофильм Unity Megacity создан на основе DOTS

Помимо того, что это улучшенный подход к написанию кода игры с точки зрения дизайна, ECS позволяет вам использовать систему задач C# Unity и компилятор Burst и тем самым полностью использовать преимущества современного оборудования.

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

Некоторые из технологий DOTS все еще находятся в статусе предварительной версии, поэтому мы советуем разработчикам использовать стек для решения отдельных вопросов производительности проекта, не строить на базе DOTS весь проект. См. раздел «Дополнительные ресурсы» в конце этой страницы, где указаны ссылки на ключевые ресурсы DOTS.

Unity Profiler для оптимизации производительности

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

Вот несколько полезных ресурсов по оптимизации в Unity:

Наилучшие методики для общих случаев (включая подробные советы по оптимизации системы интерфейса Unity)

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

Оба языка – результат реализации Python и Ruby соответственно на платформе .NET. Чтобы использовать их в Unity придется немного повозиться с подключением нужных библиотек , их можно найти на GitHub. Все материалы в свободном доступе.

После подключения обоих языков можно будет вызывать скрипты, написанные на них, прямо из C# кода. Бонусом получим возможность вызова .NET библиотек из Python.

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

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

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

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

Заключение

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

Читать:
Как защитить флешку от записи и удаления

Більше цікавих новин

Какие языки используют для приложений Android: детальный обзорКакие языки используют для приложений Android: детальный обзор
11 фильмов, посвященных виртуальной реальности11 фильмов, посвященных виртуальной реальности
Наполняем портфолио: 12 идей для Python-проектовНаполняем портфолио: 12 идей для Python-проектов
Как происходит взлом сайта? Как от него защититься?Как происходит взлом сайта? Как от него защититься?

Создание и Использование Скриптов

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

Unity изначально поддерживает три языка программирования:

  • C# (произносится как Си-шарп), стандартный в отрасли язык подобный Java или C++;
  • UnityScript, язык, разработанный специально для использования в Unity по образцу JavaScript;

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

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

Создание скриптов

В отличии от других ассетов, скрипты обычно создаются непосредственно в Unity. Вы можете создать скрипт используя меню Create в левом верхнем углу панели Project или выбрав Assets > Create > C# Script (или JavaScript/Boo скрипт) в главном меню.

Новый скрипт будет создан в папке, которую вы выбрали в панели Project. Имя нового скрипта будет выделено, предлагая вам ввести новое имя.

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

Структура файла скрипта

После двойного щелчка на скрипте в Unity, он будет открыт в текстовом редакторе. По умолчанию Unity будет использовать MonoDevelop, но вы можете выбрать любой редактор из панели External Tools в настройках Unity.

Содержимое файла будет выглядеть примерно так:

Скрипт взаимодействует с внутренними механизмами Unity за счет создания класса, наследованного от встроенного класса, называемого MonoBehaviour . Вы можете думать о классе как о своего рода плане для создания нового типа компонента, который может быть прикреплен к игровому объекту. Каждый раз, когда вы присоединяете скриптовый компонент к игровому объекту, создается новый экземпляр объекта, определенный планом. Имя класса берется из имени, которое вы указали при создании файла. Имя класса и имя файла должны быть одинаковыми, для того, чтобы скриптовый компонент мог быть присоединен к игровому объекту.

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

Заметка для опытных программистов: вы можете быть удивлены, что инициализация объекта выполняется не в функции-конструкторе. Это потому, что создание объектов обрабатывается редактором и происходит не в начале игрового процесса, как вы могли бы ожидать. Если вы попытаетесь определить конструктор для скриптового компонента, он будет мешать нормальной работе Unity и может вызвать серьезные проблемы с проектом.

A UnityScript script works a bit differently to C# script:

Здесь функции Start и Update имеют такое же значение, но класс не объявлен явно. Предполагается, что скрипт сам по себе определяет класс; он будет неявно производным от MonoBehaviour и получит своё имя от имени файла скриптового ассета.

Управление игровым объектом

Как было сказано ранее, скрипт определяет только план компонента и, таким образом, никакой его код не будет активирован до тех пор, пока экземпляр скрипта не будет присоединен к игровому объекту. Вы можете прикрепить скрипт перетаскиванием ассета скрипта на игровой объект в панели Hierarchy или через окно Inspector выбранного игрового объекта. Имеется также подменю Scripts в меню Component, которое содержит все скрипты, доступные в проекте, включая те, которые вы создали сами. Экземпляр скрипта выглядит так же, как и другие компоненты в окне Inspector:-

После присоединения скрипт начнет работать, когда вы нажмете Play и запустите игру. Вы можете проверить это добавив следующий код в функцию Start:-

Юнити: какой язык использовать, как работать

В данной статье будет рассказано об азах работы с Unity. Вы узнаете о преимуществах этой технологии, а также о том, какие языки программирования используются для работы с движком. Расскажем и про искусственный интеллект, который довольно часто встречается в современных играх, особенно в online MMORPG.

Unity – это…

Unity – среда разработки, которая подходит для межплатформенного программирования. Дает возможность написания контента более чем под 25 разных платформ. Сюда включают:

  • консоли;
  • компьютеры;
  • интернет-софт;
  • мобильные платформы.

Unity вышел в 2005 году, став с самого начала популярным. Изначальный язык интерфейса – английский. Но с движком сможет справиться даже новичок.

Преимущества

Юнити – целый сборник инструментов и виджетов для быстрой разработки всевозможного контента. Обладает огромным количеством преимуществ:

  • не надо думать, на каком языке использовать Unity – он предусматривает самые популярные ЯП;
  • кроссплатформенность;
  • наличие визуальной среды разработки;
  • расширенный инструментарий;
  • модульная система компонентов.

С многокомпонентными схемами здесь возможны некоторые трудности. А еще проблемы не исключены, если возникает необходимость в подключении внешних библиотек. Зато игры, написанные при помощи Unity, могут использовать искусственный интеллект. Им пользуются как мелкие компании, так и крупные разработчики.

Программирование и разработка – понятия

Перед тем, как интересоваться, есть ли документация к рассматриваемому движку на русском языке, стоит обратить внимание на разницу в создании контента. Существуют два схожих между собой понятия. К ним относят «разработку» и «программирование».

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

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

Языки для Юнити

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

В Unity можно использовать язык под названием C#. Он достаточно простой. Выделяется своей производительностью. Также стоит обратить внимание на то, что Unity использует open source проект под названием Moni. Он – один из вариантов реализации Microsoft Net. У него все библиотеки написаны на C#.

Стоит обратить внимание на то, что для полноценного применения Unity, Си Шарп является обязательным. Это связано с тем, что многие функции и инструменты здесь прописаны именно на нем.

JavaScript

При создании персонажа можно использовать JS. Он предусматривает следующие особенности:

  • прост в освоении;
  • выступает в качестве второго «базового» языка, на котором пишут в Юнити;
  • есть документация на русском и дружелюбное комьюнити;
  • обладает высокой читаемостью кода.

Особо хороший вариант для тех, кто уже умеет работать со скриптами. За счет GitHub удается повысить функциональность ЯП.

Разработчик на Unity может создать персонажа, внедрить его в игру и прописать иные особенности через Boo. Чем-то напоминает Python. Обладает кратким и понятным синтаксисом, предусматривающим поддержку .NET и Mono.

На практике встречается редко. Связано это с тем, что Boo не добавлял новые возможности в движок. И для программеров он не выступает особо привлекательным. Поэтому такой вариант разработки – на любителя.

IronPython

IronPython – вариант для тех, кто уже изучил руководство по Питону, и теперь хочет применить его в режиме реального времени в Юнити. Это – набор библиотек, который расположен на GitHub. Он предусматривает возможность запускать скрипты прямо из Си-Шарп-кодификации. Также можно осуществлять вызов Net библиотек через Python.

То же самое касается IronRuby. Разработка на Unity через него отнимет минимум времени и сил. А все благодаря понятному на интуитивном уровне синтаксису. Специализированное руководство поможет быстрее освоиться.

Lua – это далеко не самый популярный вариант при использовании движка, особенно если нужно внедрить искусственный интеллект. Этот язык учим тогда, когда «хочется чего-то новенького». Он:

  • предназначен преимущественно для игрового софта;
  • использует MoonSharp – интерпретатор языка для Mono;
  • не может заменить Си Шарп;
  • дает возможность подключать сторонние коды.

Большинство модов для WoW написаны именно на Lua. С подобной задачей сможет справиться любой разработчик на Unity.

Если учим азы коддинга, стоит обратить внимание на СИ-семейство. А там – на языки C/C++. Подавляющее большинство контента написано на них. Относительно программирования на Unity можно сказать, что «из коробки» после установки движка удастся сразу мастерить DLL-плагины.

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

Изучая руководство по коддингу в движке, можно увидеть, что он предлагает Rust в качестве ЯП. С его помощью происходит повышение скорости обработки данных. Это – далеко не самый популярный, но весьма интересный подход. Функции и методы здесь напрямую не пишутся. Зато они имеют поддержку вызова из Unity-кода.

Как начать работать

Программирование в Unity – это легко, особенно если есть соответствующая documentation на русском. Принцип работы здесь прост:

  1. Установить движок.
  2. Выучить выбранный заранее ЯП.
  3. Создать объекты.
  4. Разместить их на экране.
  5. Написать скрипты и триггеры.
  6. Привязать соответствующие компоненты к элементам на экране.

Так процедуру написания собственной игры в Юнити можно описать кратко. Для успешного коддинга требуется изучить азы выбранного ЯП, а лучше – рассмотреть его более профессионально.

Как быстро освоить платформу

Для того, чтобы быстрее разобраться с коддингом и выбрать язык для написания скриптов в рассмотренной платформе, можно закончить дистанционные компьютерные курсы. Они научат азам и секретам программирования. Обратить внимание нужно на направление «Разработчик на Unity». Подойдет курс как новичкам, так и опытным программерам.

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

Интересует GameDev-направление? Обратите внимание на авторские курсы в Otus!

Похожие статьи