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

Unity Game Development Essentials RUS

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

участника:

var beep : AudioClip; var menuSkin : GUISkin; var areaWidth : float; var areaHeight : float;

Здесь мы создаем ту же самую скрепку аудио звукового сигнала как замечено в нашем первом подходе script, затем щель для skin GUI, который будет применен и два числовых variables, которые мы можем использовать, чтобы определить полный размер области нашего GUI.

OnGUI () Functions

Затем, установите следующий Functions в своем script:

function OnGUI(){ GUI.skin = menuSkin;

}

Это устанавливает OnGUI () Functions, и настраивает некоторые ключевые элементы. Сначала мы применяем актив skin, представленный menuSkin Variables. Это означает, что любыми элементами GUI, помещенными в этот Functions, такими как кнопки, формы, и так далее будет управлять стиль skin, относился к этому Variables. Это облегчает обменивать skins, и таким образом полностью повторно разрабатывать Ваш GUIs сразу.

Гибкое расположение для GUIs

Затем мы должны установить область для кнопок, в которых мы должны быть привлечены. У нас уже есть areaWidth и areaHeight variables, ждущие, чтобы использоваться, но мы должны удостовериться, что область, где мы тянем прямоугольное место для нашего GUI, собирается быть гибкой, в зависимости от того, в каком решении экрана игрой управляют.

Если бы мы не сделали этого и дали определенные измерения, то GUI выглядел бы различным на различных решениях и казался бы непрофессиональным. Чтобы противостоять этому, мы создадим некоторые частные variables в пределах нашего OnGUI () Functions, который сохранит пункт центра на экране. Мы не должны использовать частную приставку, поскольку мы устанавливаем variables в Functions. Поэтому, они являются неотъемлемо частными.

После линии GUI.skin Вы только добавили, установить следующие два variables:

211

var ScreenX =

((Screen.width * 0.5)

-

(areaWidth *

0.5)),-

 

 

 

var ScreenY = ((Screen.height * 0.5)

-

(areaHeight *

0.5));

 

 

 

Здесь мы создаем два variables, которые равны сумме. У самой суммы есть две части:

((Screen.width * 0.5) - (areaWidth * 0.5));

В вышеупомянутой линии, (Screen.width * 0.5) использует параметр ширины Classes Экрана, чтобы приобрести текущую ширину экрана игры. Мы делим это на два, чтобы найти пункт центра.

Отметьте, что здесь мы заменяем "/2" * 0.5. Это - то, потому что я умножение требую меньшего количества циклов центрального процессора чем подразделение - вокруг я 100 - находя ценности в Unity.

Я

Мы тогда видим (areaWidth * 0.5), который берет ширину нашей области GUI и находит пункт центра этого, делясь на два. Итак, почему мы вычитаем это из пункта центра экрана? Это - то, потому что области GUI всегда оттягиваются из их левого края, таким образом находя, что пункт центра экрана и рисунок оттуда привели бы к предоставлению вне центра, как показано к следующему изображению:

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

212

Две части суммы помещены в пределах их собственных скобок так, чтобы их рассматривали как единственная сумма, которую Variables получает как ценность. Мы тогда повторяем этот процесс для второго Variables, ScreenY, чтобы получить вертикальное положение для нашей области

GUI.

[223]

Области крайне важны для GUILayout-без них, OnGUI () предполагает, что Вы желаете потянуть меню, используя все место экрана, начинаясь с верхнего левого. Устанавливая область с BeginArea (), мы в состоянии определить четыре параметра:

GUILayout.BeginArea(Rect( distance from left of screen, distance from top of screen, width, height ));

Rect () команда просто устанавливает прямоугольную область для BeginArea () команда, чтобы использовать, таким образом при использовании частных variables ScreenX и ScreenY, мы будем в состоянии обеспечить положение для прямоугольной области, которая будет оттянута. Для ширины и высоты, мы будем использовать общественные variables участника, установленные наверху script.

Давайте добавим этот кодекс к нашему OnGUI () Functions теперь ниже двух частных variables, которые Вы только установили:

GUILayout. BeginArea (Rect (ScreenX, ScreenY, areaWidth, areaHeight));

Область должна также быть закрыта с EndArea () команда. Поскольку это закрывает нашу область, остальная часть нашего кодекса GUI должна быть помещена перед этой линией в Functions. Добавьте следующую линию, чтобы закрыть область GUI и затем спустить эту линию так, чтобы у Вас было место, чтобы написать в кодексе перед этим:

GUILayout. EndArea ();

Добавление кнопок UnityGUI

Перед EndArea () линия, добавьте следующие линии, чтобы установить первую кнопку:

if(GUILayout.Button ("Play")){ OpenLevel("Island Level");

}

Это устанавливает новый GUILayout. Кнопка со словом Игра на этом. Помещая это в, если утверждение, мы не только создаем это, но говорим Unity, что сделать, когда кнопка нажата. Инструкция, которую

213

мы даем этому, состоит в том, чтобы вызвать таможенную функцию по имени OpenLevel () с единственным параметром - наше название уровня. Мы напишем OpenLevel () Functions после окончания OnGUI () Functions.

Затем, добавьте следующие два если утверждения, чтобы создать другие две кнопки:

if(GUILayout.Button

("Instructions")){

OpenLevel("Instructions");

}

if(GUILayout.Button ("Quit")){

Application.Quit();

Со вторым, если кнопка утверждения мы называем тот же самый таможенный OpenLevel () Functions, но на сей раз мы посылаем различную последовательность в ее единственный параметр - название все еще, чтобы быть созданным уровнем Инструкций.

Третье, если кнопка утверждения не загружает уровень, но просто называет Заявление. Оставленный () команда вместо этого, как замечено в нашем подходе 1 GUI.

Вводные сцены с таможенными functions

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

function OpenLevel(level

: String){

}

 

Здесь мы создаем Functions с параметром, названным уровнем, которому дают тип данных Последовательности - подразумевение, что, пока мы передаем последовательность текста к этому, вызывая функцию, мы можем использовать уровень слова, чтобы представить независимо от того, что текст передают к этому. В OnGUI () Functions, мы только добавили это требование:

OpenLevel (Island Level);

В этом примере слова "Island Level" передают к параметру уровня OpenLevel () Functions. Отметьте, что мы не должны говорить уровень = "Island Level", поскольку это автоматически знает, чтобы применить этот текст к параметру, это находит в OpenLevel () Functions. Если бы мы не включали правильный тип данных здесь, например передавая число или имя переменной, то мы получили бы ошибку, поскольку это не будет соответствующим для нашего параметра

214

уровня.

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

Теперь в пределах этого Functions, поместите следующие три команды:

audio.PlayOneShot(beep);

yield new WaitForSeconds(0.3 5); Application.LoadLevel(level);

Мы использовали эти команды в подходе 1. Обратитесь к ним, если Вы нуждаетесь к, но основное отличие, чтобы отметить вот наше использование параметра уровня, чтобы передать последовательность в Заявление. LoadLevel (). Чтобы закончить script, гарантируйте, что наш звуковой файл будет играть, добавляя обычную линию

RequireComponent у основания script:

@script RequireComponent (AudioSource)

Пойдите в Файл |, Экономят в редакторе script теперь, и переключаются назад на Unity. Чтобы перепроверить Ваш script, здесь это полностью:

var beep : AudioClip; var menuSkin : GUISkin; var

areaWidth

: float; var

 

 

 

 

areaHeight

: float;

 

 

 

 

function OnGUI(){

 

 

 

 

GUI.skin = menuSkin;

 

 

 

 

var ScreenX = ((Screen.width * 0.5)

-

(areaWidth *

0.5)); var ScreenY =

((Screen.height * 0.5)

-

(areaHeight * 0.5)); GUILayout.BeginArea

(Rect

 

(ScreenX,ScreenY, areaWidth, areaHeight)); if(GUILayout.Button ("Play")){

OpenLevel("Island Level");

}

if(GUILayout.Button ("Instructions")){ OpenLevel("Instructions");

}

if(GUILayout.Button ("Quit")){ Application.Quit();

}

GUILayout.EndArea();

}

function OpenLevel(level :

215

String){ audio.PlayOneShot(beep); yield new WaitForSeconds(0.35); Application.LoadLevel(level);

}

@script RequireComponent(AudioSource)

Применение и моделирование

Назад в Unity, выберите свой пустой объект игры Menu2 в группе

Hierarchy. Пойдите в Компонент | Scripts | Главное Меню GUI2, чтобы добавить script к Вашему объекту.

Тяните menu_beep звуковую скрепку от папки Меню в Project panel к Variables участника общественности Звукового сигнала в этом script, чтобы назначить это. Теперь заполнитесь в Высоте Ширины и Области Области ценностью 200.

Нажмите кнопку Play, чтобы рассмотреть меню. Поскольку Classes GUI собран от script, он только отдаст, когда игра будет проверена. В настоящее время меню мы создали через взгляды script, немного унылые, как показано в следующем скриншоте:

Таким образом мы должны будем применить стиль к этому, чтобы заставить это выглядеть немного более опрятным, который является, где skins GUI входит.

У menuSkin Variables должен быть актив skin GUI, назначающий на это, таким образом мы должны создать тот теперь. Выберите папку Меню в Project panel, и затем нажмите на кнопку Create наверху Project panel. От опускаться меню, выберите Кожу GUI. Это заставляет новый актив под названием Новый GUISkin, просто переименовать это к MainMenu.

GUI параметры настройки skin

GUI параметры настройки предложения skins для каждого элемента в

Classes GUI:

Коробки

Кнопки

Пуговицы

Лейблы

Текстовые области и области

Ползунки, scrollbars, и scrollviews

Первый "шрифт параметра" универсален ко всем элементам, которыми управляет skin. Так, начните, беря шрифт, который Вы вводили игре (который был Sugo, если Вы следовали за тем, что я сделал), и понизьте это от Project panel на этот параметр.

Мы будем использовать этот skin, чтобы разработать элементы кнопки.

216

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

Расширьтесь Нормальный, Парение, и Активный так, чтобы Вы могли видеть Цвет Фона и Текста каждого, как показано в следующем скриншоте. Второстепенный параметр устанавливает структуру для фона кнопки по умолчанию, Unity предоставляет профессионально выглядящему округл-краю, графическому выдвинутые на первый план государства для Парения и Активный. Мы будем придерживаться их для этой книги. Однако, создавая меню для Ваших собственных игр, это - определенно кое-что, с чем Вы должны экспериментировать. Пока, нажмите на каждый Текстовый блок Цвета, и используйте цветного сборщика, который, кажется, выбирает цвет для Нормального, Парения, и Активный (придавленная мышь) государства кнопки:

217

Затем, расширьте параметры настройки для Дополнения и установите

Вершину и Минимальные значения оба к 6. Это даст нам больше комнаты в кнопке выше и ниже текста непосредственно, точно так же, как дополнение делает в CSS.

Чтобы держать наши кнопки располагаемыми вертикально далее обособленно, мы должны будем увеличить нижнее поле. Расширьте параметр Края, и установите Минимальное значение в 10.

Мы теперь сделали регуляторы skin и готовы применить его к нашему script GUI. Выберите объект Menu2 в группе Hierarchy, и в главном компоненте Меню GUI2 script, назначьте Variables участника общественности Меню Кожи при перемещении и понижая skin MainMenu, который Вы только что сделали от Project panel до щели

Variables.

[229]

Теперь тест, который Ваш skin применен, нажимая кнопку Play, чтобы видеть, что script GUI отдает. Это должно быть похожим на это:

Это выглядит более профессиональным. Поскольку мы использовали

218

главный шрифт игры, это соединяется лучше с эмблемой игры. Законченный fullscreen должен теперь быть похожим на это:

Нажмите кнопку Play снова, чтобы прекратить проверять игру, и пойти в

Файл | Экономят сцену в Unity.

Время решения

Теперь это - Ваша очередь взять на себя некоторое творческое управление! Выберите подход, взгляд которого Вы предпочитаете. Основанный на том, что Вы изучили в секции объектов игры Выведения из строя ранее, или держите второй подход и оставляют трех инвалидов объектов игры Texture GUI, или повреждают Menu2 и восстанавливают их использующий checkboxes наверху Inspector.

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

Резюме

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

219

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

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

9

Последние штрихи

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

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

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

Для этого мы будем добавлять следующий к нашей игре в этой главе:Система частицы в части вулкана ландшафта

220

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