Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unity Script.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
58 Кб
Скачать
☆

5. Все скрипты одного типа

Найти любой объект одного класса, или скрипта, можно используя команду Object.FindObjectsOfType или найти первый объект одного типа при помощи Object.FindObjectOfType.

function Start () {

// Find the OtherScript which is attached to any game object in the scene.

var other : OtherScript = FindObjectOfType(OtherScript);

other.DoSomething();

}

Векторы

Unity использует Vector3, для определения всех 3D векторов. Вы также можете использовать Vector3 функцию для инициализации всех компонентов одновременно.

var aPosition = Vector3 (1, 1, 1);

Vector3 также определяет некоторые общие значения, как константы.

var direction = Vector3.up ; // аналогично Vector3 (0, 1, 0);

Операции, производимые лишь на один вектор происходят следующим образом:

SomeVector.Normalize ();

А операции с использованием нескольких векторов осуществляется с помощью Vector3 функции класса:

var oneVector : Vector3 = Vector3 (0,0,0);

var otherVector : Vector3 = Vector3 (1,1,1);

var theDistance = Vector3.Distance (oneVector, otherVector);

Важно отметить, что вы должны написать Vector3 перед именем функции JavaScript.

Вы можете также использовать общие математические операторы для управления векторами.

Переменные

Переменные доступны через окно “Inspector” внутри Unity. Любое значение, сохранённое в переменной, также автоматически сохраняются в проекте.

var memberVariable = 0.0;

Пример переменной приведённой выше будет отображаться в виде числового свойства и может быть отредактирован в окне “Inspector”

Если вы установите какой-либо тип переменной (например, Transform, Rigidbody, Collider , любое имя сценария и т.д.), то вы можете установить их, перетаскивая игровыt объектов на значение в окне “Inspector”.

var enemy : Transform ;

function Update () {

if ( Vector3.Distance ( enemy.position, transform.position ) < 10 )

print( "I sense the enemy is near!" );

}

Вы также можете создавать специальные private переменные, редактирование которых через окно “Inspector” будет недоступно, и изменить их значения можно будет лишь изменив значения переменных в самом скрипте.

private var lastCollider : Collider ;

function OnCollisionEnter (collisionInfo : Collision ) {

lastCollider = collisionInfo.collider;

}

Глобальные переменные

Вы также можете создать глобальные переменные с помощью ключевого слова static.

Давайте создадим глобальную переменную someGlobal:

/ / Создаём глобальную переменную someGobal

static var someGlobal = 5;

/ / Вы можете получить доступ к этой переменной как изнутри сценария так и через окно “Inspector”

print(someGlobal);

someGlobal = 1;

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

TheScriptName.someGlobal;

//Также мы можем изменить её значение

TheScriptName.someGlobal = 10;

Сопрограммы

При написании скрипта, зачастую возникает необходимость в чёткой последовательности действий. Подобное действие мы можем наблюдать в примере ниже:

private var state = 0;

function Update () {

if (state == 0) {

/ / Делаем шаг 0

state = 1;

return ;

}

if (state == 1) {

/ / Делаем шаг 1

state = 2;

return ;

}

// ...

}

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

while(true) {

// делаем шаг 0

yield; // ждем один кадр

// делаем шаг 1

yield; // ждем один кадр

// ...

}

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

// Делаем что-то

yield WaitForSeconds(5.0); // ждем 5 секунд

// делаем что-то еще...

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

Этот пример вызывает Do, но продолжит выполнение после вызова немедленно.

Do ();

print ("This is printed immediately");

function Do () {

print("Do now");

yield WaitForSeconds (2);

print("Do 2 seconds later");

}

Этот пример вызывает Do и ждет пока она не закончит выполнение, прежде чем продолжить свое выполнение.

// сцепка корутин

yield StartCoroutine("Do");

print("Also after 2 seconds");

print ("This is after the Do coroutine has finished execution");

function Do () {

print("Do now");

yield WaitForSeconds (2);

print("Do 2 seconds later");

}

Любой обработчик событий также может быть корутиной.

Заметим, что Вы не можете использовать yield напрямую из Update или FixedUpdate, но Вы можете использовать StartCoroutine для запуска функции, которая может это делать.

Оптимизация

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]