Автор Will Goldstone Источник Unity Game
Скачать 7.66 Mb.
|
( www.packtpub.com/files/code/8181_Code.zip ). Определите местонахождение файла по имени Menu.unitypackage от извлеченных файлов и затем возвратитесь к Unity. Пойдите в Активы | пакет Импорта, и введите активы, рассматривая и выбирая пакет, который Вы извлекли. Почтовый импорт, Вы должны видеть, что Вы добавили папку под названием Меню кВ этой папке Вы найдете следующее Структуры для главного названия игры и трех кнопок - Игра, Инструкции, и Оставленный Звуковая скрепка интерфейса подает звуковой сигнал для кнопок Создание главного меню В этой секции мы будем брать нашу существующую работу проекта острова непосредственно и использовать это как фон для наших меню. Это дает игрокам предварительный просмотр вида окружающей среды, они будут исследовать и устанавливают визуальный контекст для игры. Дублируя наш существующий остров, рассматриваемый от расстояния, используя отдаленную камеру, мы наложим 2-ые элементы интерфейса, используя два ранее упомянутых подхода. Создание сцены Для нашего меню мы будем стремиться использовать окружающую среду острова, которую мы уже создали. Помещая остров на заднем 199 плане нашего меню, мы эффективно дразним игрока с окружающей средой, которую они могут исследовать, если они начинают играть в игру. Визуальные стимулы, такие как они могли бы казаться незначительными, но они могут работать хорошо как путь подсознательного поощрения игрока попробовать игру. Визуальный пример Вот тона что будет похоже наше меню, когда это будет закончено. Этот пример взят от подхода 1; приблизьтесь 2's, пункты меню будут выглядеть различными Дублирование острова Чтобы начать, мы снова используем нашу сцену Island Level, которую мы создали. Чтобы сделать вещи легче справиться, мы будем группироваться существенные активы окружающей среды, чтобы держать их отдельными от объектов, в которых мы не нуждаемся, такие как застава и батареи. Этот путь, когда дело доходит до дублирования уровня, мы можем просто удалить все кроме группы, которую мы собираемся сделать. Группировка в Unity столь же легка как гнездящиеся объекты как дети под пустым родительским объектом. Группировка объектов окружающей среды Пойдите в Объект Игры |, Создают Пустой Это делает новый объект названным просто GameObject, так что переименуйте это как Окружающую среду теперь. В группе Hierarchy, drag and drop (перетащили и опустили) Направленный Свет, Дневной свет, Простую Воду, и объекты Ландшафта на Окружающую среду пустой объект. Теперь мы готовы дублировать этот уровень, чтобы создать наше меню в отдельной сцене. Дублирование сцены 200 Следуйте за этими шагами, чтобы дублировать сцену Гарантируйте, что сцена Island Level спасена, идя в Файл |, Экономят Сцену, и затем выбирают актив Island Level в Project panel. Пойдите, чтобы Отредактировать | Дубликат, или сокращенная Команда клавиатуры использования + D (Mac) или Ctrl + D (PC). Дублируя, Unity просто увеличивает названия объекта/актива с числом, таким образом Ваш дубликат назовут, Island Level 1 - гарантируют, что дубликат отобран в Project panel и переименовывать это к Меню теперь. Загрузите эту сцену, чтобы начать воздействовать на это, щелкая два раза на этом в Project panel. С открытой сценой Меню мы можем теперь удалить любые объекты, в которых мы не нуждаемся. Если Вы находитесь на Mac, то поддерживаете на нужном уровне командную клавишу, или если на PC, то поддерживаете на нужном уровне клавишу CTRL и выбираете все объекты в Hierarchy за исключением группы Окружающей среды, нажимая на них один за другим. Теперь удалите их из этой сцены при использовании сокращенной Команды клавиатуры + Клавиша Backspace на Mac, или Изменение + Удаляет на PC. Как показано в предыдущем скриншоте, наше меню будет выстрелом острова от вдалеке помещенного в более низкое право на экран, с названием и меню, добавленным чрезмерно в пустом месте, таком как небо и море. Чтобы достигнуть этого, мы должны будем ввести новую камеру сцене, поскольку ранее единственная камера была той, приложенной к Первому Диспетчеру Человека. Как в настоящее время нет никакой камеры в сцене, Game view должен теперь быть полностью чистым, поскольку нет никакого viewport на нашем трехмерном мире. Чтобы создать камеру, пойдите в GameObject |, Создают Другой | Камера. Гарантируя, что этот новый объект Камеры отобран в Hierarchy, войдите в следующее Положение в компонент Transform преобразовать) в Inspector - (150, 250,-650). Отмена mip картографии Картография Mip - способ произвести меньшие версии структур, чтобы спасти работу, когда они рассматриваются издалека в двигателе игры. Это может улучшить работу на 33 процента в двигателе Unity. Однако, это применяется только к структурам, которые являются частью трехмерного мира - неиспользуемые как 2-ые структуры, такие как темы собираемся использовать для нашего названия и трех кнопок меню. Мы должны выключить эту особенность в параметрах настройки Импорта для каждого актива. Начните, выбирая файл структуры MainTitle в папке Меню в Project panel. Выбудете теперь видеть параметры настройки Импорта для этой 201 структуры в Inspector, так просто отсеивать checkbox для, Производят Карты Mip. Это экономит работу, потому что Unity больше не будет производить меньшие версии во времени выполнения. Повторите этот шаг для других структур в папке Меню InstructionsBtn InstructionsBtnOver PlayBtn PlayBtnOver QuitBtn QuitBtnOver Добавление titling Затем мы нуждаемся в эмблеме для нашей игры. Самый легкий способ добавить это со структурой, которую Вы проектировали, который настроен в Unity как Texture GUI. GUI форматы Texture В папке Меню Project panel, выберите структуру по имени MainTitle. Эта структура, разработанная в Фотомагазине, спасена как РАЗМОЛВКА Теговый Формат файла Изображения. Это - хороший формат, чтобы использовать для любых структур, которые Вы намереваетесь использовать как Texture GUI. Это обеспечивает высококачественную несжатую прозрачность и может избежать некоторых проблем с белыми схемами, которые Вы можете видеть, используя другие форматы, такие как ДЖИФ (Графический Формат Обмена) или PNG (Портативная Графика Сети Создание объекта С этой отобранной структурой, создайте новый Texture GUI на основе объект, идя в GameObject | Create Other | GUI Texture. Это автоматически читает измерения отобранной структуры и заставляет ее как структуру использовать в новом объекте, как обсуждено ранее. Вы теперь найдете объект по имени MainTitle в Hierarchy, поскольку объект взял бы название от файла, Вы выбрали вовремя его создания. Расположение Поскольку большинство компьютеров в настоящее время может обращаться с решениями вили выше 1024x768 пикселы, мы выберем это как стандарт, чтобы проверить наше меню и гарантировать, что оно работает в других решениях при использовании Classes Экрана, чтобы установить динамические положения. В верхне оставленном из Game view Выбудете видеть, опускаться меню (обратитесь к следующему скриншоту). Это меню позволит Вам определять различные отношения экрана или решения. От этого опускаются меню, выбирают Автономный (1024x768), чтобы переключиться на 202 предварительный просмотр того размера. Примите во внимание что, если решение Вашего собственного компьютера будет бежать близко к этому размеру, тоне будет показывать точное представление этого, поскольку это может составить меньшую часть интерфейса Unity. К пуговице Game view (и любая из групп интерфейса) в fullscreen способ, Вы можете толпиться поэтому с мышью и выявить Клавишу пробел. Поскольку мы помещаем элементы GUI в эту главу, используем этот метод для предварительного просмотра, на что интерфейс будет похож в законченной игре. По умолчанию, все Структуры GUI начинаются со своего положения в (0.5, 0.5, 0), который данный, что 2-ые элементы работают в координатах экрана от 0 до 1 - находится в середине экрана. В компоненте Transform (преобразовать) для MainTitle возражают в Hierarchy, набор положение к (0.5, 0.8, 0). Это помещает эмблему в верхний центр экрана. Теперь, когда мы добавили главную эмблему названия игры, мы должны будем добавить три кнопки, использующие далее GUI объекты Texture. Создание подхода меню 1 В этом первом подходе мы создадим меню, которое использует прозрачную второстепенную структуру как Texture GUI, таким же образом поскольку мы только что сделали с нашей главной эмблемой названия. Мы тогда должны будем написать script, чтобы заставить структуру получить события мыши для мыши, вступают, выход мыши, и мышь вниз. Добавление кнопки игры В папке Меню в Project panel, выберите структуру по имени PlayBtn. Пойдите в GameObject | Create Other | GUI Texture. Выберите объект PlayBtn в Hierarchy, который Вы только что сделали. В Inspector, набор его Transform position к (0.5, 0.6, 0). Кнопка Texture GUI script Это является первым из наших трех кнопок, и потому что у них всех есть общие functions, мы теперь напишем script, который может использоваться на всех этих трех кнопках, используя общественные 203 variables участника, чтобы приспособить параметры настройки. Например, каждая кнопка будет Играйте звук когда нажато Загрузите различный уровень (или Сцена в сроках Unity) когда нажато Структура обмена, когда мышь по ним, чтобы выдвинуть на первый план их Выберите папку Scripts в Project panel, и от Create кнопка опускается меню, выбирает JavaScript. Переименуйте NewBehaviorScript к MainMenuBtns, и затем щелкните два раза его изображением, чтобы начать это в редакторе script. Начните, устанавливая четыре общественных variables участника наверху script, как показано в следующем кодовом отрывке var levelToLoad : String; var normalTexture : Texture2D; var rollOverTexture : Texture2D; var beep : Первым Variables, который мы будем использовать, чтобы сохранить название уровня, который будет загружен, когда кнопка этот script будет применен к, щелкают. Помещая эту информацию в Variables, мы в состоянии применить этот script ко всем трем кнопками просто использовать имя переменной, чтобы загрузить уровень. Вторые и третьи variables объявлены как variables типа Texture2D, ноне установлены в определенный актив так, чтобы структуры могли быть назначены, используя, drag and drop (перетащили и опустили) в Inspector. Наконец, Variables типа AudioClip установлен, который будет играться, когда мышью щелкнут. Теперь добавьте следующий Functions, чтобы установить структуру, используемую компонентом Texture GUI, когда мышь входит в область, которую занимает структура. Это обычно упоминается как государство одновременного нажатия клавиш или парение function OnMouseEnter(){ guiTexture.texture = rollOverTexture; В пакете Меню, который Вы импортировали, Вам предоставляют нормальное и по государству для каждой структуры кнопки. Это сначала OnMouseEnter () Functions просто устанавливает область структуры, привыкшую компонентом к тому, что было назначено на общественный Variables участника rollOverTexture в Inspector. Чтобы знать, когда мышь переезжает или выходит из границы этой структуры, добавьте следующий Functions: 204 function OnMouseExit(){ guiTexture.texture = normalTexture; Если бы это не присутствовало, то rollOverTexture просто остался бы на появлении игроку, как будто тот определенный выбор меню был все еще выдвинут на первый план. Теперь, чтобы обращаться со звуком и погрузкой соответствующей сцены, добавьте следующий Functions: function OnMouseUp(){ audio.PlayOneShot(beep); yield new WaitForSeconds(0.3 5); Мы играем звук как первую команду, чтобы гарантировать, что это играет прежде, чем следующая сцена загружена, и что это не отключено. Помещая урожай командуют промежуточный script для того, чтобы играть звуки загрузить следующую сцену, мы в состоянии остановить script для определенного числа секунд. Используя урожаи в scripting быстрый способ создать задержку, не имея необходимость писать таймер. Здесь мы просто создаем задержку с урожаем, но они могут также использоваться, чтобы выполнить весь набор инструкций перед выполнением следующей линии кодекса. Это известно как coroutine, поскольку рутина - общий термин для инструкций, выполняемых в программировании сроков. После урожая наша игра загрузит сцену, используя Заявление. LoadLevel () команда, беря любой текст мы пишем в levelToLoad общественный Variables участника в Inspector и использовании что найти соответствующий файл сцены. Создавая интерфейсы, обычно советуют поместить действия в мышь случай, а не мышь вниз случай. Это дает игроку шанс отодвинуть их курсор, если они выбрали неправильный пункт. Наконец, поскольку мы играем звук, гарантируем, что у Вашего объекта есть компонент AudioSource, добавляя следующую линию RequireComponent к основанию Вашего script: @script RequireComponent (Пойдите в Файл |, Экономят в редакторе script и возвращаются к Unity теперь. Выберите объект PlayBtn в Hierarchy, и пойдите в Компонент | Scripts | Главное Меню Btns, чтобы применить script, который Вы только что написали. Это должно тогда появиться в списке Inspector компонентов для объекта PlayBtn. В результате линии RequireComponent у Вас также будет Звуковой Исходный компонент на Вашем объекте. 205 Назначение общественных variables участника Поскольку Выбудете видеть, общественные variables участника должны будут быть назначены прежде, чем этот script может функционировать. В Уровне, Чтобы Загрузить Variables, напечатайте на название Island Level, чтобы гарантировать, что это загружено, когда на кнопку нажимают. Тогда тяните PlayBtn и структуры PlayBtnOver от папки Меню в Project panel к Нормальному Texture и Переверните variables Texture соответственно. Наконец, тяните menu_beep звуковую скрепку от той же самой папки до Variables Звукового сигнала. Когда закончено, Ваш компонент должен быть похожим на это Тестирование кнопки Теперь нажмите кнопку Play, чтобы проверить сцену. Когда Вы перемещаете свой курсор мыши через кнопку Play Game, он должен обменять структуру к структуре PlayBtnOver, которая покрашена и имеет мотив пламени направо. Отодвигая курсор от структуры, это должно переключиться назад. Теперь попытайтесь щелкнуть кнопкой. У основания экрана Выбудете видеть ошибку в пульте, который является баром у основания высказывания экрана Island Level уровня не мог быть загружен, потому что он не добавлен к построить параметрам настройки Это - способ Unity гарантировать, что Вы не забываете добавлять все включенные уровни к Построить Параметрам настройки. Постройте параметры настройки, эффективно экспортные параметры настройки Вашей игры (в сроках развития игры, законченном, или проверьте продукт, упоминается как то, чтобы строить. Построить параметры настройки в Unity должны перечислить все сцены, включенные в Вашу игру. Чтобы исправить это, удостоверьтесь, что Вы нажимаете Игру, чтобы прекратить проверять игру, и затем пойти в Файл | Строят Параметры настройки С Построить открытой группой Параметров настройки, ниже Сцен, чтобы построить секцию, нажимают на кнопку Add Current, чтобы добавить сцену Меню, мы продолжаем работать. У сцен в построить списке параметров настройки есть заказ, представленный числом направо от названия сцены, и Вы должны удостовериться, 206 что первая сцена, которую Вы должны загрузить, всегда находится в положении 0. Drag and drop (перетащили и опустили) Island Level от Project panel, и понизьте это на текущий список сцен так, чтобы это было перечислено ниже Menu.unity, как показано в следующем скриншоте: Знайте, что нет никакого подтверждения или экономить кнопку параметров настройки на Построить диалоге Параметров настройки, так просто близко это и затем повторно проверять игру. Нажмите Игру в Unity и затем попытайтесь нажать на Вашу кнопку Play Game - Island Level должен загрузить после того, как menu_beep звуковой эффект играется. Теперь нажмите Игру снова, чтобы прекратить проверять, и Вы возвратитесь в сцену Меню. Добавление кнопки инструкций Чтобы добавить вторую кнопку в нашем меню, просто выберите структуру InstructionsBtn в папке Меню в Project panel, и пойдите в GameObject | Create Other | GUI Texture. Это создает объект также по имени InstructionsBtn в Hierarchy. В компоненте Transform преобразовать) этого объекта, устанавливает ценности Положения в (0.5, 0.5, 0). Поскольку scripting уже сделан, просто пойдите в Компонент | Scripts | Главное Меню Btns, чтобы добавить script к этой кнопке, и затем назначить соответствующие структуры ив той же самой манере, поскольку мы сделали в Назначающей общественной секции variables участника ранее. Поскольку мы еще не сделали сцену инструкций в Unity, просто заполнитесь на название Инструкции в levelToLoad Variables, и мы гарантируем, что нашу сцену называют этим позже. Добавление оставленной кнопки Эта кнопка работает в подобной манере к первым двум, ноне загружает сцену. Вместо этого это призывает Прикладной Classes build, используя Оставленный () команда заканчивать игру как заявление так, чтобы 207 Ваша операционная система закрыла это. Это означает, что мы должны будем изменить наш script MainMenuBtns, чтобы составлять это изменение. Щелкните два раза этим script в папке Scripts Project panel, чтобы начать это в редакторе script. Начните, добавляя следующий булевый общественный Variables участника к вершине script: вар QuitButton: булевый = ложный; Это, которое мы будем использовать как пуговица - если это будет установлено в истинный, тогда это заставит щелчок кнопки - OnMouseUp () Functions - управлять оставленным () команда. Если это будет ложно (то есть, его государство по умолчанию, то это загрузит уровень, относился к levelToLoad Variables как нормальному. Чтобы осуществить это, еще реструктурируйте свой OnMouseUp () Functions с если утверждение, как показано в следующем кодовом отрывке function OnMouseUp(){ audio.PlayOneShot(beep); yield new WaitForSeconds(0.3 5); if(QuitButton){ Application.Quit(); } else{ Application.LoadLevel(levelToLoad); } Здесь мы просто изменили Functions, чтобы играть звуки паузу урожай, независимо оттого, какой застегивают, это. Однако, мы должны выбрать между двумя вариантами - если QuitButton верен, то Заявление. Оставленный () команду называют, иначе (еще, уровень загружен как нормальный. Пойдите в Файл |, Экономят в редакторе script, и переключаются назад на Unity. Выберите структуру QuitBtn в папке Меню в Project panel, и пойдите в GameObject | Create Other | GUI Texture. Это создает объект по имени QuitBtn в Hierarchy. В компоненте Transform (преобразовать) для этого объекта, устанавливает ценности Положения в (0.5, 0.4, 0). С QuitBtn, все еще отобранным в Hierarchy, пойдите в Компонент | Scripts | Главное Меню Btns, чтобы добавить script. В Inspector, заполнитесь в общественных variables участника как прежде, нона сей 208 раз оставьте Уровень, Чтобы Загрузить бланки выбрать коробку рядом с недавно добавленным Оставленным Variables Кнопки. Чтобы перепроверить Ваш script, здесь это полностью var levelToLoad : String; var normalTexture : Texture2D; var rollOverTexture : Texture2D; var beep : AudioClip; var QuitButton : boolean = false; function OnMouseEnter(){ guiTexture.texture = rollOverTexture; } function OnMouseExit(){ guiTexture.texture = normalTexture; } function OnMouseUp(){ audio.PlayOneShot(beep); yield new WaitForSeconds(0.35); if(QuitButton){ Application.Quit(); } else{ Application.LoadLevel(levelToLoad); } } @script Теперь пойдите в Файл |, Экономят Сцену, чтобы обновить проект, и затем нажать Игру, чтобы проверить меню. Нажим кнопки меню Play Game должен загрузить Island Level. Кнопка Instructions вызовет 'уровень, не мог быть загружен' ошибка, которую мы видели ранее, поскольку мы еще не создали это. Кнопка Quit Game не будет вызывать ошибку, ноне будет также анонсировать в редакторе Unity, таким образом мы не будем в состоянии проверить это, пока мы не создадим строить позже. Не забудьте нажимать Игру снова, чтобы закончить проверять. Поскольку первый подход при создании создания меню теперь полон, мы будем теперь смотреть на другой метод создания функционального меню в Unity, используя OnGUI () Functions, упомянутый в Unity как часть GUI 2.0 системы, потому что это было начато с версией 2.0 Unity. Используя отладку командует, чтобы проверить scripts Несмотря на Заявление. Оставленный () команда, не анонсирующая в Редакторе Unity, мы должны гарантировать, что кнопка Quit действительно работает, вместо того, чтобы принять это дело обстоит 209 так. Чтобы проверить любую часть script, Вы можете просто поместить в команде отладки. Это пошлет сообщение в часть пульта Unity, который анонсируется у основания интерфейса. Давайте испытаем это теперь. Возвратитесь к своему script MainMenuBtns в редакторе script, и определите местонахождение части QuitButton кодекса if(QuitButton){ Application.Quit(); Считывание отладки может быть загружено список с другими его вида наряду с ошибками в пульте. Они обычно похожи на это Debug.Log("This part Сочиняя эту линию кодекса туда, где Вы ожидаете, что script выполнит, Вы можете обнаружить, работают ли специфические части Вашего script. В нашем примере мы поместили бы эту команду после Заявления. Оставленный () , поскольку это доказало бы, что команда была выполнена без проблемы. Включите это так, чтобы это было похоже наследующий кодовый отрывок if(QuitButton){ Application.Quit(); Debug.Log("This part works!"); Спасите script, идя в Файл |, Экономят в редакторе script, и возвращаются к Unity. Теперь проверьте свою сцену меню снова, нажимая кнопку Play, и Выбудете видеть, что команда отладки печатает у основания интерфейса Unity. Если Вы откроете часть Console Unity Команда + Изменение + C на Mac, Ctrl+Shift + C на PC), то Выбудете видеть, что это перечисляло там также, как показано в следующем скриншоте: Эта техника может оказаться очень полезной, диагностируя проблемы script или проектируя части теоретического script, для которого у Вас нет команд, чтобы заполнить все же. Создание подхода меню Поскольку у нас уже есть рабочее меню, вместо того, чтобы удалить это из нашей сцены, мы временно повредим объекты, которые составляют 210 это. Делая это, Вы можете выбрать, какое меню Вы предпочитаете позже и восстанавливаете по мере необходимости. Выведение из строя Объектов Игры По одному, выберите PlayBtn, InstructionsBtn, ив, и дезактивируйте их, делая следующее В Inspector, отсейте checkbox налево от названия объекта Гарантируйте, что это повернуло текст объекта к светло-серому в Hierarchy и что сам элемент исчез из предварительного просмотра Game view Письмо OnGUI () script для простого меню Теперь, создайте новый пустой объект, идя в GameObject |, Создают Пустой. Это делает новый объект в Hierarchy по имени GameObject столько компонентом Transform (преобразовать) приложенным. Это будет объектом держателя для нашего GUI 2.0 меню. Это - то, потому что script, который мы собираемся написать, должен будет быть приложен как компонент, чтобы функционировать. Имеет смысл посвящать объект этому ради организации. Поскольку положение элементов OnGUI обработано через scripting, положение transform (преобразовать) этого объекта является несоответствующим, таким образом мы не должны будем регулировать это. Просто переименуйте объект от его названия по умолчанию до Menu2 в обычной манере. Выберите папку Scripts в Project panel и нажмите на кнопку Create, выбирая JavaScript как тип актива, чтобы создать. Переименуйте этот script к MainMenuGUI2 и затем щелкните два раза его изображением, чтобы начать это в редакторе script. Установленный против расположения Для этого примера мы будем использовать Classes Расположения Unity GUI, кое-что, что более гибко для того, чтобы поместить в противоположность Classes GUI, у которого есть неподвижное расположение. Расположение GUI одобрено многими разработчиками как это автоматически элементы положений, такие как формы и кнопки, ниже друг друга. Это позволяет разработчику проводить больше времени, разрабатывая их расположение с активом skin GUI, который когда относящийся OnGUI () script, functions подобным способом к stylesheets для веб дизайна. Общественные variables участника Начните свой script, устанавливая четыре общественных variables 211 участника var beep : AudioClip; var menuSkin : GUISkin; var areaWidth : float; var areaHeight : Здесь мы создаем туже самую скрепку аудио звукового сигнала как замечено в нашем первом подходе 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: 212 var ScreenX = ((Screen.width * 0.5) - (areaWidth * 0.5)),- var ScreenY = ((Screen.height * 0.5) - (areaHeight * Здесь мы создаем два variables, которые равны сумме. У самой суммы есть две части ((Screen.width * 0.5) - (areaWidth * В вышеупомянутой линии, (Screen.width * 0.5) использует параметр ширины Classes Экрана, чтобы приобрести текущую ширину экрана игры. Мы делим это на два, чтобы найти пункт центра. Отметьте, что здесь мы заменяем "/2" * 0.5. Это - то, потому что я умножение требую меньшего количества циклов центрального процессора чем подразделение - вокруг я 100 - находя ценности в Unity. Я Мы тогда видим (areaWidth * 0.5), который берет ширину нашей области GUI и находит пункт центра этого, делясь на два. Итак, почему мы вычитаем это из пункта центра экрана Это - то, потому что области GUI всегда оттягиваются из их левого края, таким образом находя, что пункт центра экрана и рисунок оттуда привели бык предоставлению вне центра, как показано к следующему изображению Вычитая половину ширины области GUI, мы достигнем центрального положения, как показано в следующем изображении 213 Две части суммы помещены в пределах их собственных скобок так, чтобы их рассматривали как единственная сумма, которую Variables получает как ценность. Мы тогда повторяем этот процесс для второго Variables, ScreenY, чтобы получить вертикальное положение для нашей области GUI. [223] Области крайне важны для без них, OnGUI () предполагает, что Вы желаете потянуть меню, используя все место экрана, начинаясь с верхнего левого. Устанавливая область смыв состоянии определить четыре параметра GUILayout.BeginArea(Rect( distance from left of screen, distance from top of screen, width, height )); Rect () команда просто устанавливает прямоугольную область для BeginArea () команда, чтобы использовать, таким образом при использовании частных variables ScreenX и ScreenY, мы будем в состоянии обеспечить положение для прямоугольной области, которая будет оттянута. Для ширины и высоты, мы будем использовать общественные variables участника, установленные наверху script. Давайте добавим этот кодекс к нашему OnGUI () Functions теперь ниже двухчастных, которые Вы только установили GUILayout. BeginArea (Rect (ScreenX, ScreenY, areaWidth, Область должна также быть закрыта с EndArea () команда. Поскольку это закрывает нашу область, остальная часть нашего кодекса GUI должна быть помещена перед этой линией в Functions. Добавьте следующую линию, чтобы закрыть область GUI и затем спустить эту линию так, чтобы у Вас было место, чтобы написать в кодексе перед этим GUILayout. EndArea (Добавление кнопок UnityGUI Перед EndArea () линия, добавьте следующие линии, чтобы установить первую кнопку if(GUILayout.Button ("Play")){ OpenLevel("Island Level"); Это устанавливает новый GUILayout. Кнопка со словом Играна этом. Помещая это в, если утверждение, мы не только создаем это, но говорим Unity, что сделать, когда кнопка нажата. Инструкция, которую 214 мы даем этому, состоит в том, чтобы вызвать таможенную функцию по имени OpenLevel () с единственным параметром - наше название уровня. Мы напишем OpenLevel () Functions после окончания OnGUI () Functions. Затем, добавьте следующие два если утверждения, чтобы создать другие две кнопки if(GUILayout.Button ("Instructions")){ OpenLevel("Instructions"); } if(GUILayout.Button ("Quit")){ Со вторым, если кнопка утверждения мы называем тот же самый таможенный OpenLevel () Functions, нона сей раз мы посылаем различную последовательность в ее единственный параметр - название все еще, чтобы быть созданным уровнем Инструкций. Третье, если кнопка утверждения не загружает уровень, но просто называет Заявление. Оставленный () команда вместо этого, как замечено в нашем подходе 1 GUI. Вводные сцены с таможенными functions Теперь, мы должны написать таможенную функцию, которая может быть вызвана, чтобы загрузить указанный уровень. Ниже заключительной правильной вьющейся скобы OnGUI () Functions, установите Functions следующим образом function OpenLevel(level : String){ Здесь мы создаем Functions с параметром, названным уровнем, которому дают тип данных Последовательности - подразумевение, что, пока мы передаем последовательность текста к этому, вызывая функцию, мы можем использовать уровень слова, чтобы представить независимо оттого, что текст передают к этому. В OnGUI () Functions, мы только добавили это требование OpenLevel (Island В этом примере слова "Island Level" передают к параметру уровня OpenLevel () Functions. Отметьте, что мы не должны говорить уровень = "Island Level" , поскольку это автоматически знает, чтобы применить этот текст к параметру, это находит в OpenLevel () Functions. Если бы мы не включали правильный тип данных здесь, например передавая число или имя переменной, то мы получили бы ошибку, поскольку это не будет соответствующим для нашего параметра 215 уровня В результате использования этого параметра, чтобы послать последовательность текста к, везде, где параметр уровня используется, кодекс будет читать в последовательности, посланной в него. Теперь в пределах этого Functions, поместите следующие три команды audio.PlayOneShot(beep); yield new WaitForSeconds(0.3 5); Мы использовали эти команды в подходе 1. Обратитесь к ним, если Вынуждаетесь к, но основное отличие, чтобы отметить вот наше использование параметра уровня, чтобы передать последовательность в Заявление. LoadLevel () . Чтобы закончить script, гарантируйте, что наш звуковой файл будет играть, добавляя обычную линию RequireComponent у основания script: @script RequireComponent (Пойдите в Файл |, Экономят в редакторе 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 : 216 String){ audio.PlayOneShot(beep); yield new WaitForSeconds(0.35); Application.LoadLevel(level); } @script Применение и моделирование Назад в 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, чтобы разработать элементы кнопки. 217 Гарантируйте, что у Вас есть секция Кнопки GUISkin, расширенного в Inspector, нажимая на серую стрелку налево от этого так, чтобы Вы могли видеть ее параметры настройки, как показано в следующем скриншоте: Расширьтесь Нормальный, Парение, и Активный так, чтобы Вы могли видеть Цвет Фона и Текста каждого, как показано в следующем скриншоте. Второстепенный параметр устанавливает структуру для фона кнопки по умолчанию, Unity предоставляет профессионально выглядящему округл-краю, графическому выдвинутые на первый план государства для Парения и Активный. Мы будем придерживаться их для этой книги. Однако, создавая меню для Ваших собственных игр, это - определенно кое-что, с чем Вы должны экспериментировать. Пока, нажмите на каждый Текстовый блок Цвета, и используйте цветного сборщика, который, кажется, выбирает цвет для Нормального, Парения, и Активный придавленная мышь) государства кнопки 218 Затем, расширьте параметры настройки для Дополнения и установите Вершину и Минимальные значения оба к 6. Это даст нам больше комнаты в кнопке выше и ниже текста непосредственно, точно также, как дополнение делает в CSS. Чтобы держать наши кнопки располагаемыми вертикально далее обособленно, мы должны будем увеличить нижнее поле. Расширьте параметр Края, и установите Минимальное значение в 10. Мы теперь сделали регуляторы skin и готовы применить его к нашему script GUI. Выберите объект Menu2 в группе Hierarchy, ив главном компоненте Меню GUI2 script, назначьте Variables участника общественности Меню Кожи при перемещении и понижая skin MainMenu, который Вы только что сделали от Project panel до щели Variables. [229] Теперь тест, который Ваш skin применен, нажимая кнопку Play, чтобы видеть, что script GUI отдает. Это должно быть похожим на это Это выглядит более профессиональным. Поскольку мы использовали 219 главный шрифт игры, это соединяется лучше с эмблемой игры. Законченный fullscreen должен теперь быть похожим на это Нажмите кнопку Play снова, чтобы прекратить проверять игру, и пойти в Файл | Экономят сцену в Unity. Время решения Теперь это - Ваша очередь взять на себя некоторое творческое управление Выберите подход, взгляд которого Вы предпочитаете. Основанный на том, что Вы изучили в секции объектов игры Выведения из строя ранее, или держите второй подходи оставляют трех инвалидов объектов игры Texture GUI, или повреждают Menu2 и восстанавливают их использующий checkboxes наверху Inspector. Однако, рекомендуется, чтобы Вы продолжили работать со вторым подходом, используя UnityGUI, поскольку у этого есть много использования в дополнение к простому обеспечивающему меню представлению статистики вовремя тестирования, например, или построение параметров настройки для игрока, чтобы приспособиться. Эти более продвинутые темы - кое-что, с чем Вы, вероятно, столкнетесь, когда Выбудете прогрессировать из этой книги. Резюме В этой главе мы смотрели на два основных способа создать элементы интерфейса в Unity-GUI scripting и Структурах GUI. К настоящему времени у Вас должно быть хорошее понимание того, как осуществить любой подход, чтобы построить интерфейсы. В то время как есть еще 220 много вещей, Вы можете сделать с GUI scripting, методами для того, чтобы основать элементы, которые мы покрыли, вот основы, в которых Выбудете нуждаться каждый раз, когда Выпишете. Мы должны все еще произвести сцену Инструкций, содержащую информацию для игрока, ноне волнуемся, мы будем создавать это, поскольку мы смотрим на небольшое количество новых методов для мультипликации в следующей главе, среди других последних штрихов для игры непосредственно. 9 Последние штрихи В этой главе мы возьмем нашу игру от простого примера кое до чего, что мы можем развернуть, добавляя некоторые последние штрихи к острову. Поскольку мы смотрели на различные новые навыки всюду по этой книге, мы добавили отдельный пример за один раз. В этой главе мы укрепим некоторые из навыков, которые мы изучили пока, и также смотрим более подробно на некоторые заключительные эффекты, что мы можем добавить, что не крайне важны для, который то, почему лучше оставлять их до конца цикла развития. Строя любую игру, механика крайне важна - физические рабочие элементы игры должны быть вместе перед дополнительными художественными работами, и экологический талант может быть введен. Как в большинстве случаев, строя игру, крайние сроки будут установлены или, как часть независимой дисциплины разработчика, или издателем, для которого Выработаете. Оставляя последние штрихи в конце цикла развития, Вы гарантируете, что Вы не потеряли времени, воздействуя на получение самого важного element-gameplay-just права. В целях книги мы предположим, что наша механика игры является полной и рабочей как ожидалось. Теперь, повернитесь к тому, что мы можем добавить к нашей окружающей среде острова и игре вообще, чтобы добавить некоторый заканчивающийся талант. Для этого мы будем добавлять следующий к нашей игре в этой главе Система частицы в части вулкана ландшафта 221 Основанный на близости звук грохота вулкана Полоски света для нашей кокосовой застенчивой миниигры, чтобы показать кокосовую траекторию Туман, чтобы добавить реализм к лучу обзора Оживляемая сцена Инструкций, чтобы объяснить цель игры игроку Переход постепенного появления изображения для Уровня Острова, используя Структуру GUI и Альфу scripting Сообщение победы игры игроку Мы закончим, строя и смотря на различные проблемы для того, чтобы проверить Вашу игру, также как возможности взятия Вашей игры на рынок через независимые каналы разработчика. Во-первых, давайте начнем с нашими последними штрихами, делая наш более динамичный вулкан. Вулкан Для этого следующего шага, гарантируйте, что у Вас есть сцена Уровня Острова, открытая в Unity. Если Вы не имеете, то открываете это теперь или щелкая два раза на файле Сцены в Проектной группе, или идя в Файл | Открытая Сцена и затем выбирая это из папки Активов. Файлы сцены легки определить, поскольку они используют тоже самое изображение как редактор Unity непосредственно - эмблема Unity. В Главе 2 мы построили ландшафт острова с редактором ландшафта, включая угол острова, посвященного рту вулкана. Чтобы заставить этот вулкан казаться немного более реалистичным, мы добавим перо дыма и источника аудио моноскрепки, чтобы создать основанный на близости звук вулкана, пузырящегося слитой лавой. Добавляя и звуковой и визуальный элемент, мы, мы надеемся, достигнем более динамического и реалистического чувства к острову и поддержим погружение игрока в нашей игре. Начните, создавая новую систему частицы видя в GameObject |, Создают Другой | Система Частицы. Это создает новую систему частицы под названием Система Частицы в Иерархии. Гарантируйте, что это отобрано теперь, и переименовывать это Частицы Вулкана Расположение системы частицы Поскольку наш вулкан - просто часть объекта ландшафта непосредственно и не независимого объекта, расположение наших частиц в относительных условиях невозможно в обычной манере. Обычно, к относительно помещают объект, мы сделали бы новый объект ребенком объекта, которым мы желаем, чтобы это было рядом и перезагрузило свою местную позицию кВ этом случае однако, мы должны будем использовать в своих интересах групповую штуковину взгляда Сцены. Начните, нажимая на Ось Y (зеленая ручка) штуковины, чтобы измениться от перспективного вида до нисходящего или вида с высоты птичьего полета острова. Если сделано правильно, штуковина тогда показывает слово Вершина ниже этого Затем, чтобы видеть, где Ваша система частицы расположена, гарантируйте, что она отобрана в группе Иерархии, и затем выбирать инструмент Transform (преобразовать) горячая клавиша W), чтобы видеть его топоры в Сцене. Поскольку новая система частицы будет создана в центре Вашего текущего вида Сцены, мы должны будем повторно поместить это в вулкане, используя этот Вид сверху. Удостоверьтесь, что Вы можете видеть и топоры системы частицы и вулкан непосредственно - Вы можете просто должны быть изменить масштаб изображения, чтобы видеть оба на экране. Чтобы сделать это, переключитесь на инструмент вида (горячая клавиша Q), и проведение командной клавиши (Mac) или клавиша CTRL (PC), тянут мышь налево, чтобы изменить масштаб изображения, затем переключаются назад на инструмент Transform (преобразовать) (W), чтобы видеть ручки оси Вашего объекта снова. Теперь использование инструмент Transform (преобразовать, тяните X красноты) и Z синие) ручки оси независимо, пока Вы не поместили свою систему частицы в центр рта вулкана от этой перспективы, как показано в следующем скриншоте: 223 Не смущайтесь выдвижением на первый план ручек в желтом, когда Вам выбрали их - у Вас все еще есть правильная ручка Теперь нажмите на красную ручку Оси X Штуковины Сцены, чтобы дать Вам сторону - ввиду острова. Теперь используйте этот вид, наряду с инструментом Transform (преобразовать, чтобы тянуть ручку Оси Y зеленую) из Вашей системы частицы, чтобы получить это к позиции в центре вулкана, как показано в следующем скриншоте: Отметьте, что в изображении, зеленая ручка в настоящее время отбирается и таким образом выдвинута на первый план в желтом. Наконец, переключитесь назад на Перспективный вид, нажимая на белый куб в I ftsttnt . j Textured ______________ i | | RGB _____ *| | | Д 224 центре Штуковины Сцены Загрузка активов Затем, мы должны будем добавить некоторые активы к нашему проекту закончить вулкан. Активы доступны в кодовой связке, обеспеченной на packtpub.com |