Using Scripts
Unity Manual > User Guide > Working with Assets > Using Scripts

Using Scripts

Это короткое введение в создание и использование скриптов. Детальная информация о Scripting API — Scripting Reference. Детальная информация о создании геймплея через скрипты — Creating Gameplay.

Скрипты в Unity могут писаться на языках JavaScript, C# и Boo. Можно использовать один или все языки в проекте. В данной книге скрипты написаны на JavaScript, если не указано иное.

Creating new scripts

В отличие от других ресурсов (меши, текстуры и др.), файлы скриптов создаются в самой Unity.
Создание скрипта: Assets>Create>JavaScript (или C Sharp Script или Boo Script).
Новый скрипт будет называться NewBehaviourScript и располагаться в выбранной папке Project View. Если нет выбранной папки, скрипт расположится в корневой.

Можно редактировать скрипт через двойное нажатие в Project View. Будет запущен Unitron — встроенный редактор скриптов. Можно писать скрипты внешним редактором. Для установки внешнего редактора скриптов в качестве стандартного используется команда Edit>Preferences>External Scrip Editor.

Содержание нового пустого скрипта такого:

function Update () {
} 

Никакого функционала нет, но его можно добавить, изменив скрипт следующим образом:

function Update () {
    print("Hello World");
} 

Будучи выполненным, скрипт выдаст сообщение «Hello World» в консоли. Но сам по себе скрипт выполнен быть не может — сначала нужно прикрепить его к объекту в сцене.

Attaching scripts to objects

Сохраним скрипт и создадим кубик GameObject>Create Other>Cube.

Перетащим скрипт из Project View на куб (в Scene View или Hierarchy View). Или можно выделить куб и выбрать Components>Scripts>New Behaviour Script. Оба метода прикрепят скрипт к Cube. Каждый созданный скрипт отображается в меню Component>Scripts.

Если выделить Cube и посмотреть в Inspector, то там можно увидеть прикреплённые к нему скрипты

Нажмём Play для теста. В консоли отобразится текст «Hello World».

Manipulating the object

Функция print() часто используется для отладки скриптов, но она не управляет объектом. Добавим что-нибудь, что может управлять объектом:

function Update () {
    transform.Rotate(0, 5*Time.deltaTime, 0);
} 

Для новичка в скриптинге многое в нашем коде кажется непонятным. Разберём подробнее:

* Функция Update () {} содержит код, который будет выполняться несколько раз в секунду (каждый кадр);
* transform ссылается на компонент Transform игрового объекта.
* функция Rotate()содержится в компоненте Transform.
* Числа в скобках отражают угол поворота объекта вокруг осей X, Y, Z.
* Time.deltaTime это член класса Time, содержащий время, затраченное на рендер предыдущего кадра. Он позволяет вращать кубик с одинаковой скоростью, независимо производительности машины пользователя.

Мы можем прочитать этот код так: «Каждый кадр поворачиваем компонет Transform нашего геймобъекта на 5 градусов вокруг оси Y".

Можно получить доступ к различным компонентам тем же путём. Все компоненты, к которым можно получить доступ так просто, перечислены в GameObject Scripting Reference Page.

Подробная информация о взаимодейсвтии объектов, скриптов и компонентов — GameObjects или Using Components.

The Power of Variables

Наш скрипт будет всегда вращать объект Cube на 5 градусов в секунду. Можно изменить скорость поворота в скрипте, запустить сцену снова и посмотреть результат. Но это долго, есть путь и побыстрее.

Вместо того, чтобы задавать угол внутри функции Rotate(), мы объявим переменню speed и используем её в функции. Это выглядит следующим образом:

var speed = 5.0;

function Update () {
    transform.Rotate(0, speed*Time.deltaTime, 0);
}

Теперь выберем Cube и посмотрим в Inspector. Там отображается наша новая переменная speed.

Эта переменная может быть изменена прямо в инспекторе, как и любая другая. Её так же можно изменять во время просмотра игры.

Нажмём Play и изменим значение speed. Cube соответственно этому изменит скорость своего вращения. После выхода из Play mode переменная вернётся к исходному значению.

Используя переменные, можно использовать скрипт сразу для нескольких объектов, но при этом для каждого из них задавать своё значение переменной. Если приложить наш скрипт к нескольким кубам и каждому задать своё значение speed, они будут вращаться с разной скоростью, используя один скрипт.

Where to go from here

Для дальнейшего изучения скриптинга читаем следующее:
* Примеры — Tutorials.
* Scripting Overview.
* Unity Forums.