Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Unity Game Development Essentials RUS

.pdf
Скачиваний:
6559
Добавлен:
12.04.2015
Размер:
8.03 Mб
Скачать

не установлен в ценность. Это - то, потому что ценность дана этому в команде ниже этого, деля существующую ценность Variables скорости два.

Общественность против частного

Variables, которые объявлены за пределами Functions в подлиннике, известны как общественные variables участника, потому что они автоматически обнаружатся как параметры подлинника, когда он будет рассмотрен как компонент в Инспекторе. Например, рассматривая подлинник FPSWalker, приложенный как компонент

Первого объекта Диспетчера Человека, мы видим его Скорость variables участника, Скорость Скачка, и Силу тяжести:

Ценность каждого из этих variables может тогда быть приспособлена в

Инспекторе.

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

var speed = 6.0; private var jumpSpeed = 8.0; var gravity = 2 0.0;

Это сделало бы наше представление Инспектора взгляда подлинника следующим образом:

Знайте, что любая ценность, приспособленная в Инспекторе, отвергнет оригинальную ценность, данную Variables в пределах подлинника. Это не будет переписывать ценность, заявил в подлиннике, но просто заменяет это, когда игра работает. Вы можете также вернуться к ценностям, объявленным в подлиннике, нажимая на изображение Винтика направо от компонента и выбирая Сброс из опускаться меню, которое появляется.

Functions

Functions могут быть описаны как наборы инструкций, которые можно назвать в определенном пункте во времени выполнения игры. Подлинник может содержать много functions, и каждый может вызвать любую функцию в пределах того же самого подлинника. В Unity scripting, есть много встроенных functions, готовых сделаны

71

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

Все functions написаны, определяя название Functions, сопровождаемое рядом скобок, в которые разработчик может передать дополнительные параметры и открыться и согласиться с вьющимися скобами. Давайте смотреть на некоторые примеры существующих functions, которые Вы можете использовать:

Update ()

Новый файл JavaScript, созданный в Unity, начинается с Update () function, который похож на это:

function Update(){ }

Все инструкции или команды для Functions должны произойти между открытием и закрытием скоб, например:

function Update(){ speed = 5;

}

Пока команды написаны в пределах вьющихся скоб, их вызовут всякий раз, когда эта функция вызвана двигателем игры.

Игры, которыми управляют в определенном числе структур в секунду (FPS), и Update () function, называют, когда каждая структура игры предоставлена. В результате это главным образом используется для любых команд, которые должны постоянно выполняться или для того, чтобы обнаружить изменения в мире игры, которые происходят в режиме реального времени, такие как входные нажатия клавиш команд или щелчки мыши. Имея дело со связанными с физикой командами, альтернативный Functions FixedUpdate () должен использоваться вместо этого, поскольку это - Functions, который держит в синхронизации с двигателем физики, тогда как Update () непосредственно может быть Variables в зависимости от нормы структуры.

OnMouseDown ()

Поскольку пример функции, которая вызвана в определенное время, OnMouseDown () только называют, когда мышь игрока нажимает на объект игры или на элементе GUI в игре.

Это чаще всего используется для управляемых игр мыши или обнаруживающих щелчков в меню. Вот является пример основного OnMouseDown () Functions, который когда приложено к объекту игры, оставит игру, когда на объект нажимают:

function OnMouseDown(){

72

Application.Quit();

}

Письмо functions

В создании Ваших собственных functions Вы будете в состоянии определить ряд инструкций, которые можно вызвать отовсюду в пределах подлинников, которые Вы пишете. Если мы настраивали некоторые инструкции переместить объект в указанное положение в мире игры, то мы можем написать таможенный Functions, чтобы выполнить необходимые инструкции так, чтобы мы могли вызвать эту функцию от других functions в пределах подлинника.

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

function PlayerDeath(){ transform.position = Vector3(0,10,50); score-=50; lives-- ;

}

Называя этот PlayerDeath () Functions, все три команды будут нести - положение игрока установлено в X = 0, Y = 10, и Z = 50. Тогда ценность 5 0 вычтена из Variables, названного счетом, и 1 вычтен из Variables, названного жизнями - два минус символы, замеченные здесь скупой, вычитают 1, и аналогично если Вы сталкиваетесь с ++ в подлиннике, тогда это просто означает, добавляют 1.

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

PlayerDeath ();

Если еще утверждения

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

логическая переменная в истинный:

var grounded : boolean = false; var speed : float; function Update(){ if(grounded==true){ speed = 5;

}

73

}

Если условие в, если скобки утверждения встречен, то есть, если

основанный Variables становится верным, то Variables скорости будет установлен в 5. Иначе этому не дадут ценность.

Отметьте, что, устанавливая Variables, сингл равняется символу '=', используется, но проверяя статус Variables, мы используем два '= ='. Это известно, поскольку сравнительное равняется - мы сравниваем информацию, хранившую в Variables с ценностью после того, как эти два равняются символам.

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

var grounded : boolean = false; var speed : float; function Update(){ if(grounded==true){ speed = 5;

}

else{

speed = 0;

}

}

Так если не основано верно, скорость будет равняться 0.

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

if(speed >= 6){ //do

something

}

else

if(speed >= 3){

//do something different

}

else{

//если ни одно из вышеупомянутого не верно, сделайте это

}

Убедитесь, что помнили, что, где я написал//выше, я просто пишу

74

кодекс, который появился бы как комментарий (невыполненный кодекс).

Многократные условия

Мы можем также проверить на больше чем единственное условие в том если утверждение при использовании двух символов амперсанда - &&.

Например, мы можем хотеть проверить при условии двух variables сразу и только выполнить наши инструкции, если ценности Variables как определены. Мы написали бы:

if(speed >= 3 && grounded == true){ //do something

}

Если мы желали проверить на одно условие или другой, то мы можем использовать два вертикальных выровненных характера '||', чтобы означать ИЛИ. Мы написали бы этому как:

if(speed >= 3 || grounded == true){

//do something

}

Globals и точечный синтаксис

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

Используя статичный, чтобы определить globals

Сочиняя подлинники в JavaScript, Ваше название подлинника - название Вашего Classes. Это означает, что, обращаясь к Variables или functions в других подлинниках, Вы можете обратиться к Classes при использовании названия подлинника, сопровождаемого Variables, или функционировать название, используя точечный синтаксис.

Глобальное в условиях scripting может быть определено как ценность или команда, доступная любым подлинником и не просто functions или variables в пределах того же самого подлинника. Чтобы объявить глобальное в пределах Unity файлом JavaScript, статичная приставка используется. Например:

static var speed : float = 9.0;

Если бы этот Variables скорости был одним замеченным в нашем подлиннике FPSWalker, то мы были бы в состоянии получить доступ или установить ценность этого Variables от отдельного подлинника, используя название подлинника, точку, и затем название Variables, сопровождаемого, устанавливая ценность следующим образом:

FPSWalker.speed = 15.0;

75

Мы именуем этот тип Variables как глобальный Variables, но у нас могут также быть глобальные функции, которые могут быть вызваны от других подлинников. Например, PlayerDeath () Functions, упомянутый ранее, мог быть статическим Functions, который позволит Вам называть это от любого другого подлинника в игре.

Точечный синтаксис

В предыдущем примере мы использовали технику подлинника, названную точечным синтаксисом. Это - термин, который может казаться более сложным, чем это фактически, поскольку это просто означает использовать точку (или точка / период), чтобы отделить элементы, Вы обращаетесь в иерархическом заказе.

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

Например, чтобы установить вертикальное положение объекта игры, мы должны были бы изменить его координату Y. Поэтому, мы надеялись бы обращаться к параметрам положения компонента Transform (преобразовать) объекта. Мы написали бы:

transform.position.y = 50;

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

Комментарии

Во многих предписьменных подлинниках Вы заметите, что есть некоторые линии, написанные с двумя передовыми разрезами, предварительно устанавливающими их. Они - просто комментарии, написанные автором подлинника. Это - вообще хорошая идея, особенно когда начинающийся с scripting, чтобы написать Ваши собственные комментарии, чтобы напомнить себе, как работает подлинник.

Далее чтение

Поскольку Вы продолжаете работать с Unity, крайне важно, что Вы привыкаете к обращению к Справочной документации Scripting, которая установлена с Вашей копией Unity и также доступная на вебсайте Unity в следующем адресе:

<http://unity3d.com/support/documentation/ScriptRefere nce/>

Вы можете использовать scripting ссылку, чтобы искать правильное использование любого Classes в двигателе Unity. Теперь, когда Вы схватились с основами scripting, давайте смотреть на подлинник

76

FPSWalker, который отвечает за перемещение нашего Первого

характера Диспетчера Человека.

Подлинник FPSWalker

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

На Mac ушел в спешке неплатеж, редактора подлинника называют Unitron. На PC редактора подлинника называют Uniscite. Они - автономные заявления, которые просто позволяют Вам редактировать различные форматы текстового файла, JavaScript и C# быть двумя такими примерами.

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

Запуск подлинника

Выберите Первый объект Диспетчера Человека в Иерархии, и затем нажмите на название файла подлинника под FPSWalker (Подлинник) компонент в Инспекторе так, чтобы это было выдвинуто на первый план в синем, как показано в следующем скриншоте:

Это выдвинет на первый план местоположение подлинника в Проектной группе в желтом (см. следующий скриншот), помочь Вы находить это. Как только Вы определили это, щелкните два раза на изображении файла, чтобы начать это в редакторе подлинника по умолчанию.

77

Mac-FPSWalker в Unitron

На Mac FPSWalker открывается в редакторе подлинника Унитроне по умолчанию, который появляется как показано в следующем скриншоте:

Windows PC-FPSWalker в Uniscite

На Windows PC FPSWalker открывается в редакторе подлинника Унискайте по умолчанию, который появляется как показано в следующем скриншоте:

78

В то время как это - тот же самый подлинник, Вы будете видеть различные цвета синтаксиса для различных частей подлинника между двумя различными платформами. Это до редактора подлинника непосредственно и не имеет никакого опирания на функциональные возможности scripting.

Вскрытие противоречия в подлиннике

В этой секции мы будем смотреть на части потенциального подлинника, который мы только что изучили в контексте, вскрывая противоречия в их использовании в подлиннике FPSWalker.

Декларация Variables

Как с большинством подлинников, FPSWalker начинается с ряда деклараций Variables от линий 1 - 6:

var speed = 6.0; private var jumpSpeed = 8.0; var gravity = 2 0.0;

private var moveDirection = Vector3.zero; private var grounded : boolean = false;

Линии 1 - 3 являются общественными variables участника, используемыми позже в подлиннике как ценности, чтобы умножиться. У них есть десятичные разряды в их числах, таким образом они идеально показали бы набор типов данных, чтобы плавать (поскольку это - простой подлинник в качестве примера от Технологий Unity, не, все variables - напечатанные данные). Линии 5 и 6 являются частными variables, поскольку они будут только использоваться в пределах

79

подлинника.

Частный Variables moveDirection отвечает за хранение текущего передового руководства игрока как Vector3 (набор X, Y, Z координаты). На декларации этот Variables установлен в (0,0,0), чтобы мешать игроку стоять перед произвольным руководством, когда игра начинается.

Частный основанный Variables является данными, напечатанными к булевому (истинный или ложный) тип данных. Это используется позже в подлиннике, чтобы отследить то, является ли игрок опорой на основание, чтобы позволить движение и скачок, который не был бы позволен, если они не были на основании (то есть, если они в настоящее время подскакивают).

Хранить информацию движения

Подлинник продвигается к линии 8 с открытием FixedUpdate () Functions. Подобный Update () function, обсужденному ранее, неподвижное обновление называют каждой неподвижной структурой framerate - это означает, что это является более соответствующим для того, чтобы иметь дело со связанным с физикой scripting, таким как использование rigidbody и эффекты силы тяжести, поскольку стандартный Update () будет меняться в зависимости от нормы структуры игры, зависящей от аппаратных средств.

FixedUpdate () функционируют пробеги от линий 8 - 27, таким образом мы можем предположить, что как все команды и если утверждения в пределах этого, они будут проверены после каждой структуры.

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

Первое, если утверждение в пробегах Functions от линий 9 - 18 (комментарий разработчика был удален в следующем кодовом отрывке):

if (grounded) {

moveDirection = new

Vector3(Input.GetAxis("Horizontal"), 0,

Input.GetAxis("Vertical")); moveDirection = transform.TransformDirection(moveDirection); moveDirection *= speed;

if (Input.GetButton ("Jump")) { moveDirection.y = jumpSpeed;

80

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