- •Unity Script
- •Глава 1 Введение
- •Глава 2 Сценарии
- •Глава 3 Основные понятия
- •1. Назначение ссылочных типов переменных при помощи инспектора
- •2. Расположение объектов в окне иерархии
- •3. Имена и теги
- •4. Принятие в качестве параметра
- •5. Все скрипты одного типа
- •1. Используйте статическую типизацию.
- •2. Используйте #pragma strict
- •3. Кешируйте найденные компоненты.
- •4. Используйте встроенные масивы.
- •5. Не вызывайте функцию, если Вам это не нужно.
- •1. Носледование от MonoBehaviour
- •2.Использование функций Awake или Start для инициализации.
- •3. Имя класса должно соответствовать имени файла.
- •4. Корутины имеют иной синтаксис в c#.
- •5. Не используйте пространства имен.
- •6. Только публичные поля сериализуются и показываются в инспекторе.
- •7. Избегайте использования конструкторов или инициализации переменных.
- •1. Все скрипты в "Standard Assets", "Pro Standard Assets" или "Plugins" компилируются первыми.
- •2. Все скрипты в "Standard Assets/Editor", "Pro Standard Assets/Editor" или "Plugins/Editor" компилируются далее.
- •3. Все другие скрипты вне "Editor" компилируются далее.
- •4. Все скрипты в папке "Editor" компилируются последними.
Глава 2 Сценарии
Сценарий, написанный вами внутри одного или же нескольких файлов, как правило, имеет хотя бы одно определение классов, имеющих то же имя что и сам файл. Например, скрипт MyJavaScript.js будет содержать определение MyJavaScript класса. Обычно Unity автоматически создаёт класс с правильным именем, и всё что находится внутри этого файла будет членом этого класса.
Маркеры
Ключевые слова
Ключевое слово является идентификатором, как последовательность символов которая зарезервирована.
Ключевые слова Unity Script:
as
boolean
break
byte
case
char
class
continue
default
double
else
enum
false
float
for
if
in
int
long
new
null
private
protected
public
return
sbyte
static
string
super
switch
this
true
typeof
uint
ulong
ushort
virtual
void
while
Литералы
Литерал – запись в исходном коде, представляющая собой фиксированное значение.
Логические литералы
Есть два булевых(boolean) значения: правда(true) и ложь(false).
Тип boolean является логическим.
Целые литералы
Целые литералы используются для значений целого типа, таких как int, uint, long и ulong.
Десятичные литералы
Десятичные литералы используются для десятичных цифр, где количество знаков после запятой одно из следующих:
1 2 3 4 5 6 7 8 9
Шестнадцатеричные целые литералы
Шестнадцатеричные целые литералы состоят из шестнадцатеричных цифр, где шестнадцатеричные цифры одно из следующих:
1 2 3 4 5 6 7 8 9 ABCDEF ABCDEF
Реальные литералы
Реальные литералы используются для написания значений с плавающей точкой. Реальные литералы можно записать в виде:
.Десятичные цифры
десятичные цифры
В реальных литералах, десятичной точке должна следовать десятичная цифра. Поэтому 1.0 может быть использовано, а 1. нет.
Строчные литералы
Строчные литералы составляют из нуля или больших символов, заключённых в двойные кавычки.
Строка имеет тип String.
Нулевой литерал
Ключевое слово null делает литерал нулевого типа.
Операторы и знаки пунктуации
Знаки пунктуации включают в себя: {} [] () . , : ;
Операторы включают в себя: + - * / % & | ^ ! = < > ? ++ && || << >> == =< >= => <=
Глава 3 Основные понятия
Функции
Функция представляет собой группу команд, которые выполняют определённую задачу. Вот пример:
//Эта функция принимает в качестве исходных данных два номера, и добавляет их возвращая значения
function Add(number1 : int, number2 : int) : int
{
return number1+number2;
}
//Эта функция не имеет параметров и ничего не возвращает
function Start()
{
//Вызов функции, используя её имя и список параметров
var sum = Add(3,4);
}
Описание функций
function Start – эта функция вызывается самим движком только один раз при старте, очень удобна для присвоения переменным разовых значений.
function Update – данная функция вызывается движком каждый кадр. Она является самой быстрой, но довольно сильно влияет на оптимизацию.
function LateUpdate – данная функция вызывается движком каждый кадр после выполнения всех остальных команд.
function FixedUpdate – функция вызываемая движком через определённые промежутки времени. Её скорость не зависит от частоты кадров в секунду и именно поэтому в основном она применяется для работы с физикой в игре.
Основные операции
Большинство манипуляций с игровыми объектами осуществляется посредством команды Transform или же компонента Rigidbody. Они доступны в сценариях через переменные. Так что если вы хотите повернуть объект в сцене на пять градусов вокруг оси y, то в функции Update вы можете прописать следующее:
function Update(){
transform.Rotate(0,5,0);
}
Если же вы хотите переместить объект вперёд, то написать можно так:
function Update(){
transform.Translate(0,0,2);
}
Время
Класс Time содержит очень важную переменную deltaTime. Эта переменная содержит количество времени с момента последнего вызова функции Update или FixedUpdate (В зависимости от того в какой из функций она находится). Таким образом, можно изменить предыдущий пример, для того чтобы заставить вращаться объект с постоянной скоростью вне зависимости от частоты кадров. В данном случае скрипт будет выглядеть так:
function Update(){
transform.Rotate(0,5*Time.deltaTime,0);
}
Аналогичную операцию мы можем совершить и с перемещение объекта:
function Update(){
transform.Translate(0,0,2*Time.deltaTime);
}
Умножая на Time.deltaTime вы, по сути, даёте объекту команду: «Я хочу, чтобы этот объект перемещался со скоростью 10 метров в секунду, вместо 10 метров в кадре». Это хорошо не только потому, что игра будет работать в независимости от частоты кадров в секунду, но и потому, что единицы, используемые для движения легки в понимании (10 метров в секунду).
Другой пример, допустим вы хотите увеличить дальность света с течением времени:
function Update(){
light.range +=2,0*Time.deltaTime;
}
Доступ к другим компонентам
Компоненты назначаются на игровые объекты, и позже могут быть использованы вызовом через скрипт. Например, присоединение Render компонента к игровому объекту, будет визуализировать его на экране во время игры. А компонент Camera добавит к вашему игровому объекту камеру. Также, стоит отметить что все написанные вами скрипты позже могут быть присоединены к игровым объектам в качестве компонентов.
Любой компонент или скрипт присоединяемый к объекту, может быть доступен через GetComponent.
transform.Translate(0,1,0);
//Эквивалентно
GetComponent(Transform).Translate(0,1,0);
Итак, давайте попробуем найти сценарий, или встроенный компонент, используя GetComponent. Обратите внимание, для этого сценария нам понадобятся готовый скрипт “OtherScript” содержащий функцию DoSomething. Также стоит отметить то, что скрипт “OtherScript” должен быть назначен на тот же игровой объект, что и следующий сценарий:
function Update(){
var otherScript : OtherScript = Get Component(OtherScript);
otherScript.DoSomething();
}
Доступ к объектам
Самые передовые игровые сценарии могут управляться не только одним объектом. Интерфейс Unity Script имеет различные способы поиска и доступа к другим игровым объектам и компонентам, имеющимся в вашей игре.
В дальнейших примерах, мы предполагаем наличие OtherScript.js как стандартного компонента игрового объекта.
