Создание и Использование Скриптов
Поведение игровых объектов контролируется с помощью компонентов (Components), которые присоединяются к ним. Несмотря на то, что встроенные компоненты Unity могут быть очень разносторонними, вскоре вы обнаружите, что вам нужно выйти за пределы их возможностей, чтобы реализовать ваши собственные особенности геймплея. Unity позволяет вам создавать свои компоненты, используя скрипты. Они позволяют активировать игровые события, изменять параметры компонентов, и отвечать на ввод пользователя каким вам угодно способом.
Unity supports the C# programming language natively. C# (pronounced C-sharp) is an industry-standard language similar to Java or C++.
In addition to this, many other .NET languages can be used with Unity if they can compile a compatible DLL — see here for further details.
Изучение искусства программирования и использования этих языкам выходит за рамки данного введения. Однако есть множество книг, обучающих материалов и ресурсов для изучения программирования в среде Unity. Посетите Обучающий раздел на нашем сайте для получения подробной информации.
Создание скриптов
Unlike most other assets, scripts are usually created within Unity directly. You can create a new script from the Create menu at the top left of the Project panel or by selecting Assets > Create > C# Script from the main menu.
Новый скрипт будет создан в папке, которую вы выбрали в панели Project. Имя нового скрипта будет выделено, предлагая вам ввести новое имя.
Лучше ввести новое имя скрипта сразу после создания чем изменять его потом. Имя, которое вы введете будет использовано, чтобы создать начальный текст в скрипте, как описано ниже.
Структура файла скрипта
When you double-click a script Asset in Unity, it will be opened in a text editor. By default, Unity will use Visual Studio, but you can select any editor you like from the External Tools panel in Unity’s preferences (go to Unity > Preferences).
Содержимое файла будет выглядеть примерно так:
Скрипт взаимодействует с внутренними механизмами Unity за счет создания класса, наследованного от встроенного класса, называемого MonoBehaviour. Вы можете думать о классе как о своего рода плане для создания нового типа компонента, который может быть прикреплен к игровому объекту. Каждый раз, когда вы присоединяете скриптовый компонент к игровому объекту, создается новый экземпляр объекта, определенный планом. Имя класса берется из имени, которое вы указали при создании файла. Имя класса и имя файла должны быть одинаковыми, для того, чтобы скриптовый компонент мог быть присоединен к игровому объекту.
Основные вещи, достойные внимания, это две функции, определенные внутри класса. Функция Update — это место для размещения кода, который будет обрабатывать обновление кадра для игрового объекта. Это может быть движение, срабатывание действий и ответная реакция на ввод пользователя, в основном всё, что должно быть обработано с течением времени во игровом процессе. Чтобы позволить функции Update выполнять свою работу, часто бывает полезно инициализировать переменные, считать свойства и осуществить связь с другими игровыми объектами до того, как будут совершены какие-либо действия. Функция Start будет вызвана Unity до начала игрового процесса (т.е. до первого вызова функции Update), и это идеальное место для выполнения инициализации.
Заметка для опытных программистов: вы можете быть удивлены, что инициализация объекта выполняется не в функции-конструкторе. Это потому, что создание объектов обрабатывается редактором и происходит не в начале игрового процесса, как вы могли бы ожидать. Если вы попытаетесь определить конструктор для скриптового компонента, он будет мешать нормальной работе Unity и может вызвать серьезные проблемы с проектом.
Управление игровым объектом
Как было сказано ранее, скрипт определяет только план компонента и, таким образом, никакой его код не будет активирован до тех пор, пока экземпляр скрипта не будет присоединен к игровому объекту. Вы можете прикрепить скрипт перетаскиванием ассета скрипта на игровой объект в панели Hierarchy или через окно Inspector выбранного игрового объекта. Имеется также подменю Scripts в меню Component, которое содержит все скрипты, доступные в проекте, включая те, которые вы создали сами. Экземпляр скрипта выглядит так же, как и другие компоненты в окне Inspector:-

После присоединения скрипт начнет работать, когда вы нажмете Play и запустите игру. Вы можете проверить это добавив следующий код в функцию Start:-
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 изучать не стоит. В остальном ограничений нет, работать можно с любым из перечисленных языков.
Більше цікавих новин
Древнейшие сайты, которые работают до сих пор: ТОП-11
Улучшаем код JavaScript: топ-6 лайфхаков
Эти проекты обречены на успех: самые свежие идеи для программистов
4 топовых сайта для экономии времени разработчика
Unity — выбираем редактор javascript
Итак, мы хотим написать игрушку на Unity. Юнити предоставляет нам выбор из трех скриптовых языков — Javascript, C# и Boo.
Т.к. с Boo разбираться вообще не хотелось, то для нас стоял выбор JS vs C#. Для наших целей больше подошел именно JavaScript (на самом деле, правильнее было бы называть его UnityScript), т.к. он имеет более мягкую типизацию, да и переводить существующий у нас код из флэшового ActionScript’а было бы гораздо проще.
Но мы столкнулись с проблемой, которую вообще не ожидали обнаружить.
Вы не поверите, но для Unity нет нормального редактора JavaScript’а (речь идет о разработке под Windows, хотя под Мак ситуация, как я понял — не лучше).
Список редакторов можно посмотреть в неофициальной вики.
Итак, что же я хочу от редактора?
Конечно же, я хочу умный и развитый auto-complete (intellisence).
Будем тестировать редактор на следующем коде:
Отдельно создадим тестовый класс TestClass.js:
public static var var_stat: int ;
public var var_pub: int ;
public static function TestFunc(): void <>
Теперь создадим второй класс, на котором и будем тестить auto-complete:
public var var_pub: int ;
protected var var_prot: int ;
private var var_priv: int ;
public static function StatFunc(): void <>
private function PrivFunc(): void <>
public function get var_getter(): int
public function DoTest() <
var var_int: int ;
// здесь будем тестить auto-complete
Писать код будем в месте, помеченном комментом и будем хотеть увидеть автокомплит.
- MonoDevelop, поставляющийся в комплекте с Unity
- UniScript Editor (здесь)
- UnityDevelop (модифицированный FlashDevelop древней версии + классы для unity 3.5 — здесь)
И ни один редактор не поддерживает Ctrl+Click.
Вывод? Не знаю… Писать на шарпах в VS?
А вообще — я удивлен, что Unity так безолаберно относится к своему редактору. Все-таки, — продукт недешевый ($1500 за про версию + еще $3000 за про версии под iOS/Android). Могли бы сделать что-то более вменяемое. Например, прикрутить к тому же Eclipse, как это сделали Adobe со своим Flash Builder (который, по сути, — является Эклипсом).
Если у кого-то есть опыт — welcome в комменты, с удовольствием выслушаю.
UPDATE: После всего этого я плюнул и сам поспособствовал появлению Unity Develop 4 (подробности и ссылки на скачивание в этом топике).
Name already in use
Lessons / 09 / README.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Скрипты. Программирование с помощью C#
Скриптовый язык — это язык программирования, который применяется для написания сценариев – кратких описаний действий, выполняемых движком Unity. А скрипты — это файлы, которые хранят в себе текст написанный на скриптовом языке.
Unity поддерживает следующие языки программирования: C# (с помощью библиотеки Mono), Javascript. Языки C# и Javascript считаются одними из самых популярных среди программистов. На C# пишутся программы для компьютера, веб приложения. Javascript активно используется для создания интернет страниц.
Скрипты можно писать вручную с помощью языка программирования, либо с помощью сторонних инструментов.

Программист пишет скрипт на одном из поддерживаемых Unity языков, сохраняет его в виде текстового файла. Далее добавляет его в проект Unity. В этот момент Unity проверяет код, написанный в скрипте и, если в нем нет ошибок, происходит компиляция.
Консоль ( Console ) – это панель в Unity, которая отображает ошибки в коде (отображаются красным значком), предупреждения (отображается желтым значком) и позволяет выводить справочную информацию (белый значок). По умолчанию эта панель отображается в нижней части программы в закладке Console . Если эта панель не отображается на экране, то в главном меню выбери Window → Console .

Сообщения отображаются в виде списка.
- Чтобы очистить список нажми кнопку Clear
- Активированный параметр Clear On Play автоматически очищает список при каждом запуске игры
- Параметр Collapse объединяет повторяющиеся строки в одну и показывает количество повторений
Установка среды разработки
Чтобы писать программы, необходим редактор кода.
В комплекте с Unity идет MonoDevelop, так что его не требуется устанавливать отдельно. Вы должны убедиться, что MonoDevelop установлен в качестве внешнего редактора скриптов в Preferences (меню: Edit > Preferences , а затем выберите панель External Tools )
Также MonoDevelop можно обновить с оффсайта. Он полностью бесплатен.
Другой вариант — использовать Visual Studio. Бесплатная версия требует регистрации через месяц после установки.
Создание первого скрипта: вывод сообщения в консоль
Данный код выведет сообщение Hello world! в консоль. Функция Start() вызовется один раз при старте программы
Добавление и запуск скрипта
Скрипт определяет только план компонента и, таким образом, никакой его код не будет активирован до тех пор, пока экземпляр скрипта не будет присоединен к игровому объекту. Вы можете прикрепить скрипт перетаскиванием ассета скрипта на игровой объект в панели Hierarchy или через окно Inspector выбранного игрового объекта. Имеется также подменю Scripts в меню Component , которое содержит все скрипты, доступные в проекте, включая те, которые вы создали сами. Экземпляр скрипта выглядит так же, как и другие компоненты в окне Inspector :

После присоединения скрипт начнет работать, когда вы нажмете Play и запустите игру
Код, перед которым стоят два слеша // , игнорируется компилятором и ты можешь добавлять туда описание своего кода, чтобы сделать его понятнее
Код, который должен вызываться один раз при старте программы, мы пишем внутри функции Start() (как в примере выше)
Код, который должен вызываться каждый кадр, мы пишем внутри функции Update()
Если хотим сохранить данные (количество жизней игрока, патронов или очков опыта), то для этого используются переменные. Переменные разделяются на типы, которых существует огромное множество.
Разберем самые популярные:
- string . Позволяет хранить текст (пример: имя игрока);
- int . Хранит числа как положительные, так и отрицательные целые числа (пример: 50, -100);
- float . Хранит числа с плавающей точкой одинарной точности (пример: 3.14f);
- double . Хранит числа с плавающей точкой двойной точности (пример: 3.14);
- bool . Переменная-переключатель. Хранит состояние включено (true) или выключено (false);
- Vector2 . Переменная данного типа хранит в себе значение по оси x и y;
- Vector3 . Переменная данного типа хранит в себе значение по оси x, y и z;
- GameObject . Переменная хранит в себе объект из сцены Unity;
- Transform . Переменная хранит в себе transform (координаты, поворот и масштаб) объекта из сцены Unity;
- Color . Хранит цвет;
Так создается целочисленная переменная с именем number , в которую записывается число 42
Операции с переменными
Переменные численных типов можно складывать, вычитать, умножать и делить.
Разберем их подробнее:
- + — операция сложения;
- — — операция вычитания;
- * — операция умножения;
- / — операция деления.
Рассмотрим пример вывода суммы целых чисел в консоль.
Того же результата можно добиться и не сохраняя числа в переменные
Часто возникает необходимость соединения нескольких строк и цифр вместе. Для этих целей используется символ + , так же как и для сложения чисел (конкатенация – это совмещение нескольких строк в одну).
Или без использования переменных
Счетчик времени с помощью Time.deltaTime
Практически во всех играх требуется знать сколько времени прошло с момента запуска игры (пример: игры на время). Но в Unity мы можем узнать только сколько прошло времени между кадрами (напоминаю, что игра – это набор кадров, которые быстро меняются. В одну секунду количество таких кадров может достигать 60 и больше).
Чтобы узнать сколько времени прошло между кадрами — используется Time.deltaTime .
Чтобы сделать дробное число целым, ставим перед ним (int)
Координаты объекта хранятся в свойстве transform.position . Каждая координата имеет тип float
Получение внешних объектов и параметров
Часто нам требуется, чтобы один объект взаимодействовал с другим. Для этого в скрипте данного объекта следует создать публичную public переменную
После этого она появится в инспекторе свойств объекта. И мы сможем присвоить ей нужное значение (или объект)
В этом примере мы выводим в консоль координаты врага, ссылка на который добавляется через инспектор свойств объекта