• Название:

    Unity Script за разницу во времени между Москвой...

  • Размер: 0.17 Мб
  • Формат: DOC
  • или





Автор: tonyd с unity3d.com

Перевод:

Скептик для fpscreatorworld.ucoz.ru

Это руководство посвящено введению в язык скриптования Unity Script.
Рассчитано на начинающих программистов, не имеющих опыта в программировании.
Если у вас есть какой-то опыт в программировании, вы можете пропустить начало и перейти к функциям и классам.
Если же вы являетесь экспертом, то вряд ли в этом руководстве найдете что-то интересное для себя, но, начав читать, удивитесь, насколько сильно я упростил многие понятия!Чтобы запустить примеры кода, вам необходимо быть знакомым с интерфейсом Unity, знать, как создать скрипт и применять его к игровому обьекту.
Смотрите ссылки ниже.
Введение в интерфейс Unity: http://download.unity3d.com/support/Tutorials/1%20-%20 GUI%20 Essentials.pdf Введение в скриптование Unity – прочитайте секции "Our first script", и "Attaching the script". http://download.unity3d.com/support/Tutorials/2%20-%20 Scripting%20 Tutorial.pdf Текст КРАСНЫМ касается только программирования на Unity i Phone.
ПЕРЕМЕННЫЕ Воспринимайте их как коробку с чем-то внутри.
Вы можете выбрать любое имя для переменной, но не используйте пробелы и зарезервированные для команд и функций слова, начинайте с буквы (желательно в нижнем регистре), и вообще пользуйтесь только буквами, цифрами и подчеркиваниями.
Изпользуйте слово 'var' для создания переменной.
Назовем нашу первую переменную 'korobka'.
Код:

var korobka;

Вот, мы задекларировали нашу первую переменную! Если вас удивляет точка с запятой в конце строки, то запомните, что все строки с коммандами в Javascript должны заканчиваться точкой с запятой.
На i Phone, если вы создали переменную, не присвоив ей значение, то вы обязаны указать ее тип, для примера, в нашем случае, String.
Основные типы переменных – String, int, float, boolean, и Array.
Обратите внимание на регистр первых букв типов!
var korobka: String;

Конечно, наша коробка пустая, так давайте положим что-то в нее следующей строчкой:
Код:

korobka = "yabloko";

Теперь наша переменная содержит значение – строку (это такой тип переменной), которое называется "yabloko". Мы можем устанавливать значения переменной сразу при ее создании подобной строкой:
Код:

var korobka = "yabloko";

Но значение, которое мы установили, мы можем затем изменять вновь и вновь.
Мы можем изменить наше значение на любое другое (но такого же типа, как и изначальное).
Код:

korobka = "apelsin";

Кроме текста, переменые могут содержать числа:
Код:

var chislo = 10;

Тут мы имеем целое число(int), которое не является десятичной дробью.
Но мы можем задать и число с плавающей запятой (float), которое уже есть десятичной дробью:
Код:

var chislo ZZapyatoy = 10.5;

Переменные бывают еще логичного типа.
Тогда они принимают значение true/false (пер. с англ – правда или ложь):
Код:

var igra Okonchena = true;

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

var yablochniy Pirog = Array("yabloko", "sahar", "testo", "krem");

В этой переменной перечисляются необходимые ингридиенты для приготовления yablochniy Pirog! Если же мы хотим увидеть содержимое yablochniy Pirog, мы можем вывести содержимое массива в консоль Unity, используя комманду класса Debug (пер. с англ. - отладка).
Добавьте к коду следующую строку:
Код:

Debug.
Log(yablochniy Pirog);

При начале игры, в консоли отобразится: yabloko,sahar,testo,krem Чтобы обратиться к элементу массива, нам нужно указать индекс этого элемента (позицию в массиве).
Поначалу непривычно, что нумерация начинается с нуля.
Индекс 0 обозначает первый элемент массива.
Код:

var yablochniy Pirog = Array("yabloko", "sahar", "testo", "krem");var element1 = yablochniy Pirog[0]; Debug.
Log(element1);

Этот самый принцип можно применять и к строчным переменным.
Следующий код выведет в консоль первый символ строки "privet", букву 'p':
Код:

var moya Stroka = "privet"; Debug.
Log(moya Stroka[0]);

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

var chislo1 = 10; var chislo2 = 11; var itogo = chislo1 + chislo2; Debug.
Log(itogo);

Если мы сложим целое число (int), и число с запятой (float), результатом будет число с запятой:
Код:

var chislo1 = 100; var itogo = chislo1 + 1.5; Debug.
Log(itogo);

Конечно же, мы можем также вычитать, делить, умножать целые числа и числа с запятой.
Но что поразительно, мы можем суммировать и строки.
Этот код соберет две строки в одну:
Код:

var stroka1 = "yablochnoe"; var stroka2 = "sitro"; var vmeste = stroka1 + stroka2; Debug.
Log(vmeste);

Если мы сложим число и строку, то результатом всегда будет строка.
Также мы можем умножать строки.
Код:

var pojelaniye = "pozdravlyayu"; Debug.
Log(pojelaniye * 3);

К сожалению, вычитать или делить строки невозможно.
Есть способы разделить строку или убрать ее часть, но это уже относится к более сложным вещам.
Давайте закончим наше обсуждение переменных методами их увеличения (изменения значения на некоторую величину).
Для начала, создадим переменную и присвоим ей значение 1:
Код:

var chislo = 1;

Мы можем увеличивать переменную разными способами.
Код:

chislo = chislo + 1;

Строка добавит 1 к переменной, обновит ее и переменная станет 2. Но мы, программисты, считаем, что это долго.
Мы ведь ужасно ленивые.
И сокращаем код:
Код:

chislo += 1;

Это то же, что и number = number + 1;

Но знаете, что? Очень ленивые програмисты сказали, что и ЭТО долго.
Они сократили код к такому:
Код:

chislo ++;

Такое вы уже наверняка видели в скриптах, но и подумать не могли, что это то же самое! Но запомните, что если вы хотите увеличить переменную больше, чем на 1, ++ работать не будет.
Сокращение ++ подходит только для += 1. Вы можете тем же образом вычитать:
Код:

chislo --;

Но вот для деления и умножения вам придется использовать более длинную форму:
Код:

chislo = chislo/2; chislo *= 2;

Запомните, что звездочкой обозначают умножение, а слэшем – деление.
СОСТОЯНИЯ IF-ELSE Ситуации описываются текущими состояниями.
Если состояние сейчас правдиво, программа выполняет действие.
Мы можем сравнить два значение, используя два знаки уравнения == "chislo == 10" будет правдивым, когда наша переменная chislo будет иметь значение 10, при всех других вариантах состояние будет ложным.
Важно: два знака уравнения используются для сравнения переменных и их значений, но в тоже время один знак уравнения используется, чтобы задать переменной какое-то значение! Следующий код создает переменную и делает ее значение true (пер. с англ. - правда), проверяет, действительно ли ее значение true, и в таком случае пишет текст в консоль:
Код:

var igra Zapushchena = true; if (igra Zapushchena == true) Debug.
Log("Igra byla zapushchena");

Нашей переменной 'igra Zapushchena' автоматически присваивается логический тип.
И нет смысла писать "если правда равна правде", поэтому пишут просто "если правда":
Код:

var igra Zapushchena = true; if (igra Zapushchena) Debug.
Log("Igra byla zapushchena");

Вы удивлены, почему я не поставил точку с запятой во второй строчке? Это не самостоятельная строка, а лишь половина строки состояния.
Ее пишут отдельно для облегчения понимания кода, а вообще правильно было бы все писать в одну строку:
Код:

if (igra Zapushchena) Debug.
Log("Igra byla zapushchena");

Я могу написать и таким макаром:
Код:

if (igra Zapushchena){ Debug.
Log("Igra byla zapushchena"); }

Фигурные скобки обозначают определенный блок кода, и сообщают, что при правдивом состоянии выполнится все, что находится внутри! Когда внутри их должно лежать лишь одно действие, фигурные скобки не обязательные.
Но если внутри будет больше одной строки, вы ДОЛЖНЫ использовать эти скобки! Обратите внимание, что точка с запятой после таких скобок не ставится.
Код:

var igra Zapushchena = false; If (igra Zapushchena == false){ igra Zapushchena = true; Debug.
Log("Ya tolko chto zapustil igru"); }

Прочитайте вторую строку этого кода.
Помните ленивых программистов? Они не хотят писать
Код:

if (igra Zapushchena == false)

когда можно написать:
Код:

If (not igra Zapushchena)

Ну, вы думали, что уж этот код нельзя сократить? Смотрите:
Код:

if (! igra Zapushchena)

Да, слово 'not' (пер. с англ. - нет) ленивые программисты заменют восклицательным знаком! Вы можете использовать восклицательный знак и для других типов переменных, объединяя его со знаком уравнения, что будет значить "не равно":
Код:

var otvet = 1; if (otvet != 42) Debug.
Log("Nepravilniy vopros!");

Также вы можете использовать знаки больше и меньше:
Код:

var vozrast = 18; if (vozrast > 18) Debug.
Log("silno star"); else if (vozrast < 18) Debug.
Log("silno molodoy"); else Debug.
Log("kak raz 18");

Увидели комманды 'else if' и 'else' (пер. с англ. – иначе, если и иначе)? Если первое состояние, следующее после if, ложное, тогда проверяется состояние, следующее после комманды else if.
Если и это ложное, тогда проверяется следующее состояние после следующего else if (если оно написано), и, в конце концов, если все состояние проверены и все ложные, выполняется действие, следующее после else.
Если после 'if', 'else if', и 'else' следует больше одного действия, каждый блок кода должен начинаться и заканчиваться фигурными скобками.
Вы можете одновременно проверять несколько состояний:
Код:

if (vozrast >= 21 && pol == "devushka") mojno Navivat Vodku = true;

Как вы видите, мы использовали оператор И, который мы в коде отобразили двумя символами амперсанда: &&. Если оба состояния правдивые, действие выполняется.
Если одно из них ложное, действие не выполняется.
Примечание: если вы хотите запустить на выполнение следующий выше код, то не забудьте сначала создать нужные для него переменные vozrast (int), pol (String), и mojno Navivat Vodku (boolean)!
Код:

if (dvijok == "Unity" || razrabotchik == "drug") nujno Kachat Igru = true;

Тут мы использовали оператор ИЛИ, который в коде пишется двумя вертикальными: ||. Если одно из состояний правдивое, действие выполняется.
Если оба состояния ложные, действие выполняться не будет.
Примечание: если вы хотите запустить на выполнение следующий выше код, то не забудьте сначала создать нужные для него переменные dvijok (String), razrabotchik (String), и nujno Kachat Igru (boolean)! Также мы можем использовать комманду 'in' (пер. с англ. - в).
Как правило, она используется с массивами.
Код:

var imena = Array("artur", "vova", "roma", "valya"); if ("valya" in imena) Debug.
Log("Mi nashli Valyu!");

ЗАЦИКЛИВАНИЕ
Зацикливание позволит вам выпонять комманды нужное количество раз, не прописывая их каждый раз заново.
Что, если вы хотите увеличивать число и отображать его состояние в консоли? Вы можете сделать так:
Код:

var chislo = 0; chislo += 1; Debug.
Log(chislo); chislo+= 1; Debug.
Log(chislo); chislo+= 1; Debug.
Log(chislo);

И еще, и еще, и так дальше… но это скучно, а ленивые программисты больше всего ненавидят переписывать вновь и вновь тот же код! Вот так можно использовать цикл:
Код:

var chislo = 0; for (i=1; i<=10; i++){ chislo += 1; Debug.
Log(chislo); }

Хорошо, вторая строка может вас немного обескуражить.
Но на самом деле все предельно просто.
i=1 – создает временную переменную и устанавливает ее значение в 1. Для временных переменных не нужно использовать комманду var, она и так сама по себе подразумевается. i<=10 – устанавливает, со скольких итераций будет состоять цикл.
В нашем случае цикл будет повторяться, пока временная переменная будет меньше или равна 10. i++ – как считать итерации.
В нашем случае, мы увеличиваем нашу переменную на единицу, то есть используем сокращение i++, обозначающее i+=1. Если мы просто печатаем от 1 до 10, то код будет еще короче.
Нам тогда необязательно использовать переменную chislo:
Код:

for (i=1; i<=10; i++) Debug.
Log(i);

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

for (i=10; i>0; i--) Debug.
Log(i);

Или печатать все парные числа между 1 и 10:
Код:

for (i=2; i<=10; i+=2) Debug.
Log(i);

Кроме комманды For (пер. с англ. - для), мы можем использовать для зацикливания комманду While (пер. с англ. - когда).
While выполняется, когда состояние правдивое.
Такой себе аналог комманде If для цикла.
Код:

var chislo = 0; while (chislo < 10){ chislo ++; Debug.
Log(chislo); }

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

var igrok Prigayet = true; var schetchik = 0; while (igrok Prigayet){ //прыгает schetchik += 1; if (schetchik > 100) igrok Prigayet = false; } Debug.
Log("Doprigalsya");

Увидели четвертую строку этого кода? Та, что начинается с двух слэшей и на русском языке? Слэши всегда нужно ставить перед комментариями, и это значит, что код после них выполняться не будет.
Комментарии служат для ведения записей о работе кода для себя или других, для вставки комманд, котрые могут добавиться в основной код в дальнейшем, для напоминаний об отладке некоторого участка кода и т.д.
ФУНКЦИИ Если вы думаете, что циклы здорово экономят время и место, то вы еще ничего не знаете о функциях! Функции служат для выполнения нескольких комманд одновременно как единого действия.
Но вначале скажу о простых вещах.
Давайте создадим функцию, выводящую текст "Privet Mir" в консоль.
Код:

function Skazat Privet(){ Debug.
Log("Privet Mir"); }

Для выполнения, или, как говорят программисты, вызова, этой функции стоит вписать:
Код:

Skazat Privet();

Скобки после имени функции пишутся и при ее создании, и при вызове.
Также отметьте, что имя функции пишется с большой буквы.
В обычном Java Script совсем не так, но имена функций с большой буквы – норма для Unity.
Что, если мы хотим функцией сказать различные вещи? Мы можем вставить параметр в скобки функции:
Код:

function Skazat(tekst){ Debug.
Log(tekst); }

Этот tekst – параметр, временная переменная, которая может быть использована только внутри функции.
На i Phone вы обязаны указывать также и тип параметра, в данном случае переменная будет текстовой, то есть String. function Skazat(tekst: String){ Теперь, при вызове функции, мы можем указать параметр:
Код:

Skazat("Funkcii – eto kruto!");

Передать функции как параметр мы можем и переменную:
Код:

var moy Tekst = "Menya zovut Vova!"; Say(moy Tekst);

Полезной возможностью функции является возвращение значений.
Приведенная функция проверяет число, и, если оно парное, то возвращает значение true, иначе возвращает false:
Код:

function Parnoye Chislo(chislo){ //На i Phone вам нужно указать тип параметра (chislo: int); if (chislo % 2 == 0) // Примечание: оператор % получает оставшуюся часть числа, деленного на 2
return true; else return false; } var desyat = 10; if (Parnoye Chislo(desyat)) Debug.
Log("Chislo " + desyat + " parnoye");

Когда мы используем функция доходит до комманды return, она немедленно прерывается и завершается.
Код:

function Update(){ if (!igra Zapushchena) return; //выход из функции}

Функция Update() – одна из основных в Unity.
Вы не можете вызвать ее вручную, она вызывается сама автоматически каждый кадр.
ПЕРЕГРУЗКА ФУНКЦИЙФункции можно перегружать.
Звучит запутанно, но на самом деле всё просто.
Это значит, что мы можем иметь несколько версий функции с различными типами параметров, или разным количеством параметров.
Чтобы управлять разными типами параметром, просто используйте двоеточие : чтобы заявить тип передаваемого параметра.
Основные типы – String, int, float, boolean, и Array.
Обратите внимание на регистр первых букв типов!
Код:

function Tip Pechati(item : String){ Debug.
Log("Ya stroka, tip String"); } function Tip Pechati(item : int){ Debug.
Log("Ya celoye chislo, type int"); } function Tip Pechati(item : float){ Debug.
Log("Ya chislo s zapiatoy, type float"); } function Tip Pechati(item : boolean){ Debug.
Log("Ya logicheskaya peremennaya, type boolean"); } function Tip Pechati(item : Array){ Debug.
Log("Ya massiv, type Array"); } function Tip Pechati(item: Game Object){ //для всего остального Debug.
Log("Ya chto-to drugoe"); } function Tip Pechati(){ Debug.
Log("Ti zabil ukazat parametr!"); } Tip Pechati(); Tip Pechati("privet"); Tip Pechati(true);

КЛАССЫ Итак, переменные могут быть различных типов, таких как String или int.
Но что, если нам нужно создать новый тип переменной, который будет немного отличаться? Классы – это новые типы переменных, созданные ВАМИ.
Код:

class Chelovek{ var imya; var professiya; } //Создать объект типа Chelovekvar vasya = Chelovek(); vasya.imya = "Vasya Pupkin"; vasya.professiya = "doctor"; Debug.
Log(vasya.imya + " - " + vasya.professiya);

Класс содержит две переменных этого класса, которые еще называют свойствами – imya и professiya.
Вы обращаетесь к ним, набирая имя экземпляра, то есть переменной, обозначающей класс (в нашем случае, vasya) и через точку – имя свойства.
Также вы можете вставить параметр при создании экземпляра класса.
Вы сделаете это, создав конструктор, в котором специальная функция автоматически вызывается при каждом новом создании экземпляра класса.
Функция имеет то же имя, что и класс, и используется, что обратится к классу.
Код:

class Zver{ var imya; function Zver(n : String){ //это конструктор imya= n; Debug.
Log(imya + " rodilsya!"); } } kot = Zver("Murzik"); //команда var необязательна при создании экземпляров!

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

class Chelovek{ var imya : String; function Chelovek(n : String){ imya = n; } function Celovat(p : Chelovek){ Debug.
Log(imya + " celuet " + p.imya + "!"); } } olya = Chelovek("Olya"); dima = Chelovek("Dima"); olya.
Celovat(dima);
НАСЛЕДОВАНИЕ Классы могут наследовать другой класс или расширять (добавлять функционал) другой класс.
Класс, который наследован, обычно называют базовым классом или родительским классом.
Расширенный класс также называют дочерним классом или полученным классом.
Этот класс будет базовым:
Код:

class Chelovek{ var imya : String; function Chelovek(n : String){ //конструктор
imya = n; } function Idti(){ //фунция класса Debug.
Log(imya + " idet"); } }

Чтобы расширить этот класс, создадим новый класс с командой 'extends' (пер. с англ. – расширяет):
код:

class Devushka extends Chelovek{ var pol : String; function Devushka(n : String){ //конструктор super(n); //вызывает первичный конструктор и присваивает имя pol = "jenskiy"; //добавляет дополнительный функционал расширенному классу } function Idti(){ super.
Idti(); //вызывает первичную функцию Debug.
Log("I ona sovsem daje nichego!"); //добавляет дополнительный функционал расширенному классу
} }

Заметьте, что мы можем обращаться к настройкам и методам базового, или родительского класса, используя команду 'super'. Если мы создадим экземпляр класса Devushka и вызовем функцию Idti(), вызовутся оба класса – и базовый, и дочерний:
Код:

sveta = Devushka("Sveta"); sveta.
Idti();

ВСТРОЕННЫЕ ТИПЫ И СВОЙСТВА Сейчас вы, наверное, удивляетесь, "если созданные мной типы могут иметь свойства и функции, почему они не могут иметь встроенные типы, свойства или функции"? На самом деле, они могут.
Чтобы превратить число в строку, используйте встроенную функцию To String() (пер. с англ. - в строку):
Код:

var chislo = 10; var tekst = chislo.
To String();

Чтобы получить длину массива или строки, используйте встроенное свойство length (пер. с англ - длина):
Код:

var tvari = Array("lot", "sobaka", "sviniya", "delfin", "shimpanze"); var itogo = tvari.length;

Этот код можно использовать для цикла.
Добавьте к нему следующие ниже строчки:
Код:

for (i=0; i Log(tvari[i]); }

Это отразит содержание вашего массива, по элементу за раз.
Чтобы добавить элемент к массиву, используйте встроенную функцию Add() (пер. с англ. - добавить):
Код:

tvari.
Add("lemur");

Чтобы разделить массив на строки, используйте функцию Split() (пер. с англ. - разделить):
Код:

var fraza = "Bistraya korichnevaya lisa prigaet vozle lenivogo psa"; var slova = fraza.
Split(" "[0]); Debug.
Log(Array(slova));

Чтобы получить часть строки, используйте функцию Substring().
Эта функция содержит два параметра, индекс первого символа и последнего:
Код:

var fraza = "Bistraya korichnevaya lisa prigaet vozle lenivogo psa"; var pervaya Polovina = fraza.
Substring(0, 22); Debug.
Log(pervaya Polovina);

Чтобы перевести текст в верхний регистр, используйте функцию To Upper() (пер. с англ. – в верхний);
Код:

var missiya = "idem delat krutiye igri!"; Debug.
Log(missiya.
To Upper());

Ну и как вы уже догадались, наоборот можно сделать функцией To Lower() (пер. с англ.– в нижний).
Код:

Debug.
Log( ("VOT I VSE. KONEC").
To Lower() );

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ Введение в скриптинг на Unity http://download.unity3d.com/support/Tutorials/2%20-%20 Scripting%20 Tutorial.pdf Введение в программирование на Unity с вики-страницы Unify http://www.unifycommunity.com/wiki/index.php?title=Programming_Chapter_1_Old Перечень свойств и методов Unity http://unity3d.com/support/documentation/Script Reference/ MSDN – Для продвинутых программеров.
Поиск скриптов на языке JSCRIPT, который очень похож на Unity javascript. http://msdn.microsoft.com/en-us/library/aa187916.aspx_________________Математика лягушки http://www.mindspring.com/~torajima/meganesoft