Главная страница
Навигация по странице:

  • Пиксела

  • Автор Will Goldstone Источник Unity Game


    Скачать 7.66 Mb.
    НазваниеАвтор Will Goldstone Источник Unity Game
    АнкорUnity Game Development Essentials RUS.pdf
    Дата28.01.2017
    Размер7.66 Mb.
    Формат файлаpdf
    Имя файлаUnity Game Development Essentials RUS.pdf
    ТипДокументы
    #746
    страница7 из 17
    1   2   3   4   5   6   7   8   9   10   ...   17

    code/8181_Code.
    zip). Определите местонахождение пакета, названного batteries.unitypackage от извлеченных файлов. Как только Вы сделали это, выключатель назад к Unity и идете в Активы | Пакет Импорта. Рассмотрите к местоположению, которое Вы загружали пакет к, и выбирать это как файл, чтобы импортировать. Вам подарят список активов в этом пакете в окне диалога Активов Импорта, затем нажмете на Импорт, чтобы импортировать эти активы. В этом пакете Вами предоставляют Трехмерная модель батареи Пять файлов изображения составления счетов батареи с обвинением Звуковая скрепка, которая будет играться, после коллекции батареи игроком

    117 Просто щелкните Импортом, чтобы подтвердить здесь. У Вас должны тогда быть следующие файлы в Вашем проекте.
    Drag and drop (перетащили и опустили) модель батареи от Другой папки Моделей в Проектной группе на вид Сцены. Тогда толпитесь свой курсор по виду Сцены и прессе
    F
    , чтобы сосредоточить вид относительно этого. Ваша батарея будет помещена в произвольную позицию - мы повторно поместим ее, как только мы закончили делать наш prefab.

    118 Маркировка батареи Поскольку мы должны обнаружить столкновение с объектом батареи, мы должны дать ему признак, чтобы помочь нам идентифицировать объект в scripting, который мы напишем коротко. Нажмите на Признак, опускаются, меню, и у основания избранного меню Добавляет Признак. Группа Инспектора тогда переключается, чтобы показать Менеджера Признака. В следующей доступной щели Элемента, добавьте признак, названный батареей, как показано в следующем скриншоте:

    119 Нажмите Вступает, чтобы подтвердить признак, затем повторно выбрать объект батареи в группе Иерархии, и выбирать новый признак батареи из Признака опускаются меню в Инспекторе для того объекта. Масштаб, коллайдер, и вращение Теперь, мы подготовим батарею как prefab, применяя компоненты и параметры настройки, которые мы хотели бы оставить в каждой новой копии батареи. Увеличение батареи Мы создаем кое-что, что игрок обязан собирать, таким образом мы должны гарантировать, что объект имеет разумный размер для игрока, чтобы определить в игре. Поскольку мы уже смотрели на вычисление объектов в FBXImporter для актива, мы будем смотреть на простое изменение размеров с компонентом Transform (преобразовать) в Инспекторе. С объектом батареи, все еще отобранным в Иерархии, измените все ценности Масштаба в компоненте Transform преобразовать) Инспектора к 6. Добавление более аккуратного коллайдера Затем, мы должны добавить примитивный коллайдер к батарее, чтобы позволить игроку взаимодействовать с этим. Пойдите в Компонент | Физика | Краткий Коллайдер. Мы выбрали этот тип коллайдера, поскольку это - самая близкая форма на нашу батарею. Поскольку мы не хотим, чтобы игрок врезался в этот объект, собирая это, мы заставим его коллайдер вызывать способ. Так, на недавно добавленном Кратком компоненте Коллайдера, выберите коробку направо от, Более аккуратное урегулирование. Создание эффекта вращения Теперь мы напишем сценарий, чтобы заставить объект батареи вращать, чтобы добавить визуальный эффект и облегчить для игрока замечать это. На Проектной группе, выберите папку Сценариев, чтобы гарантировать, что сценарий, который мы собираемся создать, создан в

    120 пределах той папки. Пойдите в кнопку Create на Проектной группе, и выберите JavaScript. Нажмите
    F2 и тип, чтобы переименовать недавно созданный файл от NewBehaviourScript до RotateObject. Щелкните два раза его изображением, чтобы начать это в редакторе сценария. Наверху Вашего нового сценария вне Update () function, создайте общественный Variables участника с плавающей запятой, названный rotationAmount, и установите его ценность в 5.0, добавляя следующую линию var rotationAmount : float = 5.0; Мы будем использовать этот Variables, чтобы определить, как быстро объект батареи вращается. Поскольку это - общественный Variables участника (за пределами любого Functions и не объявленный как частный, мы также будем в состоянии приспособить эту ценность в Инспекторе, как только сценарий присоединен к батарее. В пределах Update () function, добавьте следующую команду, чтобы вращать нашу батарею вокруг ее Оси Y с ценностью, равной rotationAmount Variables: function Update () { transform.Rotate(Vector3(0,rotationAmount,0)),-
    } Вращение () команда ожидает Vector3 (X, Y, Z) ценность, и мы обеспечиваем ценности 0 для X и устанавливая ценность Variables в Ось Y. Поскольку мы написали эту команду в пределах Update () function, она будет выполнена в каждой структуре, и таким образом батарея будет вращаться 5 степенями каждая структура. В редакторе сценария, пойдите в Файл |, Экономят и затем переключаются назад на Unity. Чтобы приложить этот сценарий к нашему объекту батареи, гарантируйте, что это отобрано в группе Иерархии. Тогда, пойдите в Компонент | Сценарии | RotateObject или просто drag and drop перетащили и опустили) сценарий от Проектной группы на объект в группе Иерархии. Нажмите кнопку Play наверху интерфейса, и наблюдайте батарею в виде Сцены, чтобы удостовериться, что вращение работает. Если это не работает, то возвратитесь к своему сценарию и проверьте, что Вы не сделали ошибок - перепроверка, применили ли Вы сценарий к правильному объекту Не забудьте нажимать Игру снова, чтобы закончить Ваше тестирование перед продолжением. Экономия как prefab Теперь, когда объект батареи полон, мы должны будем клонировать объект три раза, давая нам в общей сложности четыре батареи. Лучший

    121 способ сделать это с заранее приготовленной системой Unity. Создание prefab просто означает делать шаблон данных, который хранит параметры настройки объекта, созданного в сцене. Это может тогда быть клонировано, редактируя, или иллюстрироваться примерами созданный налету в игре) во времени выполнения. Создайте новую папку в пределах Проектной группы для того, чтобы сохранить это и любые будущие prefab. Чтобы сделать это, сначала гарантируйте, что Вам не выбирали существующую папку, щелкая в некотором сером месте ниже объектов в Вашей Проектной группе. Нажмите на кнопку Create и выберите Папку, затем переименуйте проистекающую новую папку к Prefab, нажимая Возвратитесь) или
    F2
    (PC) и перепечатывание. Выберите недавно сделанную папку Prefab. От кнопки Create, выберите Prefab. Это создает новый пустой prefab в пределах папки
    Prefab. Вы можете определить пустой prefab, поскольку у этого будет серое изображение куба, как отклонено як законченному prefab, у которого есть светло-голубое изображение куба. Переименуйте новый пустой prefab на батарею. Теперь тянитесь, батарея возражают, что мы продолжали работать от группы Иерархии, и понижаем ее на пустой объект prefab батареи в Проектной группе. Это превращает Вашу батарею в prefab и также делает копию в текущей сцене связанной стем, что означает, что любые изменения, произведенные в prefab в Проектной группе, будут отражены в копии в сцене. Объекты в сцене, связанной с активами в проекте, показывают в группе Иерархии с синим текстом, в противоположность черному тексту объектов только для сцены. Рассеивание батарей Теперь, когда нам сохранили наш объект батареи как prefab, когда мы дублируем копию в сцене, мы создаем дальнейшие случаи prefab. Гарантируйте, что Вам все еще выбрали батарею в Иерархии и затем дублируете объект батареи три раза так, чтобы Вы имели четыре всего, это может быть сделано или собираясь Редактировать | Дубликат или используя сокращенную Команду
    клавиатуры
    + D на Mac) или
    Ctrl + D на PC). То, когда объекты в сцене дублированы, дубликаты созданы в той же самой позиции - не позволяет этому смущать Вас. Unity просто делает это, чтобы стандартизировать, где новые объекты в сцене заканчиваются, и это - то, потому что, когда объект дублирован, каждое урегулирование - идентичное включение позиция. Кроме того, легче помнить, что они находятся в той же самой позиции как оригинал и просто нуждаются в перемещении от той позиции.

    122 Теперь, выберите каждую из этих четырех батарей в группе Иерархии, и используйте инструмент Transform (преобразовать, чтобы повторно поместить их вокруг заставы. Помните, Вы можете использовать штуковину видав верхнем правом из вида Сцены, чтобы переключиться от перспективного вида, чтобы превысить, понять, и виды сбоку. Не забудьте помещать батареи в высоту, в которой игрок может поднять их, так что не заставляйте их слишком высоко достигать. Как только Вы поместили эти четыре батареи вокруг заставы, у Вас должно быть кое-что как это Показ батареи Теперь, когда у насесть наши предметы коллекционирования батареи вместе, мы должны будем показать игроку визуальное представление того, что они собрали. Структуры, импортированные с пакетом батарей, были разработаны, чтобы ясно показать, что игрок должен будет собрать четыре батареи, чтобы полностью зарядить дверь. Обменивая пустое изображение батареи onscreen для одного с 1 единицей обвинения, затем для изображения с 2 единицами обвинения, итак далее, мы можем создать иллюзию динамического элемента интерфейса. Создание объекта Texture GUI Часть активов, импортированных с пакетом батарей, была папкой структур. Эта папка содержит пять файлов изображения - один из пустого элемента аккумуляторной батареи и другие четырех стадий заряда батареи. Созданный в Adobe Photoshop, эти образы имеют прозрачный фон, и сохранены в PNG (Портативная Графика Сети) формат. Формат PNG был отобран, потому что он сжат, но все еще

    123 поддерживает высококачественные альфа-каналы. Альфа-каналы - то, что много частей программного обеспечения именуют как канал изображения (помимо обычных красных, зеленых, и синих каналов, который создает прозрачность. Мы начнем создавать GUI показ продвижения батареи, добавляя пустую батарею, графическую к сцене, используя компонент Структуры Unity GUI. В Проектной группе, расширьте папку структур, и выберите файл, названный battery_nocharge. В пути, различном к нашему нормальному методу перемещения и бросания активов в вид Сцены, мы должны определенно создать новый объект с компонентом Структуры GUI и определить battery_nocharge графику как структуру для того компонента, чтобы использовать. В то время как это - технически процедура стремя шагами, это может быть сделано в отдельном шаге, выбирая структуру, которая будет использоваться в Проектной группе, и затем движение к
    GameObject | Создает Другой | Структура GUI от главного меню. Сделайте это теперь. Новый объект будет создан с приложенным компонентом GUITexture. В Инспекторе будут уже определены области Вставки Пиксела (см. следующий скриншот), основанный на измерениях выбранной структуры, которые Unity читает от файла Области Вставки Пиксела определяют измерения и показывают область объекта. Типично параметры Ширины и Высоты должны быть определены, чтобы соответствовать оригинальным измерениям Вашего файла структуры, и X и ценности Y должны быть установлены вполовину измерений. Снова, это настроено для Вас, когда Вы создаете объект, выбрав структуру сначала.

    124 Выбирая графику Вы желаете использовать сначала, Unity знает, что, когда это создает новый объект с компонентом GUITexture, это должно выбрать тот файл как структуру и заполниться в измерениях структуры также. Кроме того, когда Вы выбираете графику и создаете объект Texture
    GUI, используя главное меню, созданный объект называют после Вашего актива структуры ради удобства - помнят это, поскольку это поможет Вам найти объект в группе Иерархии, отправьте создание. Выберите объект, который Вы создали в группе Иерархии, выбирая battery_nocharge, и переименовываете ее на Батарею GUI, нажимая Возвращение) или
    F2
    (PC) и перепечатывание. Расположение Структуры GUI Имея дело с 2-ыми элементами, Вы должны будете работать в координатах экрана. Поскольку они являются 2-ыми, они только работают в X и топорах Y - с Осью Z, используемой для приоритета слоя между многократными элементами Структуры GUI. Координаты экрана идут с приращением в десятичных числах от 0 дои чтобы поместить Батарею GUI, где мы хотим видеть это (в более низко-левом экрана, мы должны напечатать ценности в X и коробки Y компонента Transform (преобразовать) объекта GUI Батареи.
    Заполнитесь в ценности 0.05 в X ив. Вы должны теперь видеть графику, показанную на виде Игры, как показано в следующем скриншоте:

    125 Вы можете также показать 2-ые детали в виде Сцены, нажимая на кнопку Game Overlay, как показано в следующем скриншоте:
    Scripting для изменения GUI Теперь, когда у насесть несколько батарей, чтобы собраться, и поскольку это - первая стадия нашей батареи GUI onscreen, мы должны написать сценарий, чтобы обратиться к компоненту Структуры GUI и обменять его структуру, основанную на том, сколько батарей было собрано. Выберите папку Сценариев в Проектной группе, и затем нажмите на кнопку Create и выберите JavaScript. Переименуйте NewBehaviourScript, который Вы создали к BatteryCollect, и затем щелкаете два раза его изображением, чтобы открыть его в редакторе сценария. Поскольку мы пишем сценарий, чтобы управлять компонентом Структуры объекта GUI Батареи GUI, лучше писать сценарий, чтобы быть присоединенным к тому объекту, так, чтобы связанные сценарии были присоединены к своим соответствующим объектам. Сочиняя следующий сценарий, структура, которая используется onscreen, будет основана на том, сколько батарей было собрано - эта информация будет храниться в целом числе (целое число) Variables. После того, как мы будем закончены, сочиняя этот сценарий, мы приложим к нашему сценарию PlayerCollisions, добавляя более аккуратное обнаружение столкновения для батарей. Каждый раз, когда столкновение обнаружено с батареей, мы увеличим целое число в нашем сценарии BatteryCollect, который обменяет структуру компонента Структуры GUI на Батарее GUI. Наш сценарий начинается, устанавливая статический Variables-a, глобальный, доступный от других сценариев - чтобы сохранить

    126 количество собранного обвинения. Мы делаем этот Variables целым числом, поскольку нет никакого шанса его не быть целым числом. Добавьте следующую линию к вершине сценария теперь static var charge : int = 0; Тогда мы нуждаемся в пяти variables, чтобы сохранить структуры, которые представляют пять различных государств нашей пустой Батареи, плюс четыре стадии обвинения. Так, мы добавим пять неназначенных variables типа Texture2D:
    Var charge1tex
    :
    Texture2D; var charge2tex
    :
    Texture2D; var charge3tex
    :
    Texture2D; var charge4tex
    :
    Texture2D; var charge0tex
    :
    Texture2D; Поскольку они - общественные variables участника, мы просто назначим файлы изображения им от Проектной группы, использование drag and drop (перетащили и опустили) к щелям Variables, которые будут созданы в Инспекторе (составляющий) вид этого сценария. Чтобы настроить неплатежи для компонента Структуры GUI, добавьте следующее Начало () Functions к сценарию, ниже variables, которые Вы только объявили function Start(){ guiTexture.enabled = false; charge = 0;
    } Начало () Functions выполнит однажды, когда текущий уровень (или сцена, в условиях Unity) начался. Помещая в линии guiTexture.enabled = false; Мы гарантируем, что компонент не позволен, так, чтобы батарея не была видима, когда игра начнется. Мы также установили Variables обвинения в 0, когда игра начинается, чтобы гарантировать, что сценарий предполагает, что никакие батареи не собраны на начале сцены. Затем, переместите заключительную правильную вьющуюся скобу
    Update () function вниз несколькими линиями, и поместите следующий если утверждение в этом if(charge == 1){ guiTexture.texture = charge1tex; guiTexture.enabled = true; Здесь мы проверяем Variables обвинения на ценность 1, и затем выполняем две команды

    127

    guiTexture.texture = charge1tex;: Эта линия устанавливает щель структуры компонента Структуры GUI (объекта, к которому этот сценарий присоединен, чтобы использовать файл изображения, назначенный на charge1tex Variables.

    guiTexture.enabled =true;: Эта линия позволяет компонент непосредственно. Мы заставили Батарею GUI не быть видимой (то есть, не позволили, когда игра начинается, чтобы не смутить пользователя, и избежать загромождать экран - мы только хотим, чтобы они видели пустую батарею GUI, как только они попытались открыть дверь. Эта линия сценария отвечает за предоставление возможности GUI, когда игрок собрал одну батарею, потому что этим управляют если утверждение. Позже, мы добавим scripting к дверному столкновению луча в нашем сценарии PlayerCollisions, чтобы включить пустую батарею GUI, если пользователь, случится, попытается войти в дверь перед собиранием его первой батареи. Затем мы добавим еще три если утверждения Update () function, проверяющему на другие государства Variables обвинения. Как никогда не будет случая, где обвинение равняется и 1 и другая ценность, мы еще будем использовать, если утверждения, поскольку они проверены, когда любой из другого, если утверждения уже находятся в игре. Если мы должны были использовать, если для каждого из следующих утверждений, они будут все проверены одновременно, делая неэффективный сценарий. Добавьте следующий код после заключительной вьющейся скобы Вашего существующего если утверждение else if(charge == 2){ guiTexture.texture = charge2tex;
    } else if(charge == 3){ guiTexture.texture = charge3tex;
    } else if(charge >= 4){ guiTexture.texture = charge4tex;
    } В них еще, если утверждения, мы просто заставляем структуру, показанную компонентом Структуры GUI использовать отличающиеся структуры при использовании общественных variables участника, установленных наверху сценария (мы назначим файлы изображения на эти variables в Инспекторе позже. Мы не должны еще позволять компонент в любом из них, если

    128 утверждения, поскольку он был бы уже позволен, когда игрок поднял свою первую батарею. Наконец, чтобы обратиться, когда наш Variables обвинения в 0, мы еще можем просто добавить утверждение до конца нашего, если и еще если утверждения, который эффективно говорит, "если ни одно из вышеупомянутого неверно, затем сделайте следующий" Поэтому, как наше существующее, если и еще если утверждения еще ищут ценность обвинения 1 - 4, следующий, утверждение будет заботиться о показе, когда игра начнется (когда Variables обвинения будет равняться 0). Это по существу поддерживает Начало () Functions: else{ guiTexture.texture = charge0tex; Теперь, когда сценарий полон, пойдите в Файл |, Экономят в редакторе сценария и переключаются назад на Unity. Выберите объект GUI Батареи в группе Иерархии и пойдите в Компонент | Сценарии | BatteryCollect от главных меню. Это назначает наш сценарий на объект GUI Батареи, и Вы должны видеть это в Инспекторе с пятью общественными variables участника, ждущими назначения, как показано в следующем скриншоте:
    Drag and drop (перетащили и опустили) пять файлов структуры от папки структур Проектной группы, которую Вы импортировали ранее к соответствующим variables участника, как показано в следующем скриншоте: Теперь, когда наш onscreen GUI для коллекции батареи готов, мы просто должны добавить это к сценарию PlayerCollisions, приложенному к Первому Диспетчеру Человека, чтобы обнаружить наше взаимодействие характера игрока с более аккуратными коллайдерами

    129 объектов батареи. Коллекция батареи со спусковыми механизмами Чтобы вызвать отличающиеся государства нашей Батареи GUI, мы будем использовать Functions по имени OnTriggerEnter (), чтобы обнаружить взаимодействие с объектами, у которых есть более аккуратные коллайдеры способа, то есть, наши коллекционируемые батареи. Прежде, чем мы добавим этот Functions к нашему сценарию
    PlayerCollisions, мы добавим общественный Variables участника наверху, чтобы считать, что звуковая скрепка играется, когда игрок поднимет батарею как форму основанной на аудио обратной связи, чтобы поддержать элемент GUI. Откройте сценарий PlayerCollisions, щелкая два раза на его изображении в папке Сценариев Проектной группы. Это начнет сценарий в редакторе сценария, или просто переключится назад на него для Вас, если Вам уже откроют файл. Добавьте общественный Variables участника для звуковой скрепки к вершине сценария, добавляя линию var batteryCollect : AudioClip; Помните, что этому не назначают в сценарии, но просто оставлено с типом данных (AudioClip) так, чтобы это могло быть назначено в Инспекторе позже. Затем, поместите свой курсор выше заключительной линии сценария
    @script RequireComponent (AudioSource) И добавляют в следующем Functions: function OnTriggerEnter(collisionInfo : Collider){ Это - Functions определенно для того, чтобы обнаружить столкновения с более аккуратными коллайдерами способа. Любое столкновение с таким коллайдером помещено в параметр, названный collisionInfo, который имеет Коллайдер типа, означая, что информация, подвергнутая сомнению от этого, должна быть сделана в ссылке на объект, приложенный к коллайдеру, который был поражен. В OnTriggerEnter () Functions (то есть, перед его столкновением права закрывающим вьющуюся скобу, добавляют следующие, если утверждение, чтобы подвергнуть сомнению любые спусковые механизмы, с которыми сталкиваются if(collisionInfo.gameObject.tag == "battery"){

    130
    BatteryCollect.charge++; audio.PlayOneShot(batteryCollect);
    Destroy(collisionInfo.gameObject);
    } С этим, если утверждение, мы подвергаем сомнению collisionInfo параметр Functions, проверяя, присоединен ли коллайдер в текущем столкновении к объекту игры, помеченному с батареей как слова, которая наши предметы коллекционирования батареи. Если дело обстоит так, то мы делаем три вещи Обратитесь к обвинению сценария BatteryCollect статический глобальный) Variables, используя точечный синтаксис, и добавьте тот к его ценности, используя ++ метод. Добавляя к ценности обвиняют в каждом столкновении с батареей, мы делаем сценарий BatteryCollect обменивает структуры, которые представляют обвинение, заканчивая связь между нашими столкновениями и onscreen GUI. Играйте один выстрел (отдельный случай) звуковой скрепки, назначенной на batteryCollect Variables в Инспекторе. Удалите объект, с которым сталкиваются, сот текущей сцены используя Разрушение () команда. Используя точечный синтаксис снова, мы определили, что объект, который будет разрушен, является тем, в настоящее время сталкивался с. Поскольку этим управляют, если утверждение, вызывая это, только если столкнутой - с объектом является теговая батарея, тогда нет никакого шанса разрушения неправильного объекта. Разрушение
    () команда просто берет объект игры как свой главный параметр в этом случае, но это может также использоваться со вторым параметром после запятой, то есть, ценность плавания, чтобы представить задержку вовремя прежде, чем это удалит объект. Теперь спасите сценарий, идя в Файл |, Экономят в редакторе сценария, и переключаются назад на Unity. Выберите объект First Person Controller в Иерархии, и определите местонахождение Столкновений Игрока Сценарий) компонент в Инспекторе. Вы должны теперь видеть, что есть Батарея Variables нового общественного участника, которой позвонили за счѐт абонента, которая ждет назначения Звукового актива Скрепки.
    Drag and drop (перетащили и опустили) звуковой актив скрепки, названный battery_collect от папки Звуков в Проектной группе, или нажмите на серость вниз стрелка направо ни от Одного (Звуковая Скрепка, и выберите battery_collect из раскрывающегося списка, который появляется. Нажмите кнопку Play и проверьте игру, Вы должны теперь быть в состоянии идти характер игрока в каждую из батарей, и они должны исчезнуть, вызывая батарее GUI казаться onscreen и затем увеличить с каждой собранной батареей. Вы должны также услышать звуковой

    131 эффект, играемый с каждой батареей, которую Вы собираете, так что удостоверьтесь, что аудио Вашего компьютера поднят Нажмите Игру снова, чтобы прекратить проверять, как только Вы гарантировали, что Вы можете собрать все батареи. Ограничение доступа заставы Главный пункт этого осуществления должен продемонстрировать, как Вы можете управлять определенными ситуациями в пределах своего развития игры. В этом примере мы желаем позволить доступ игрока к заставе, только если они зарядили раздвижную дверь, собирая четыре батареи. Эта загадка представляет нас как разработчиков с двумя главными проблемами, которые будут обращены Как игрок знает, что они должны собрать батареи, чтобы войти в дверь Как мы можем закодировать нашу игру, чтобы открыть дверь, только если все батареи были собраны Чтобы обратиться к первой проблеме, мы будем стремиться поддерживать элемент тайны о нашей игре. Мы только подарим игроку намек, чтобы собраться, батареи должен они быть достаточно любознательными, чтобы попытаться войти в заставу. Чтобы сделать это, мы должны будем добавить onscreen инструкции, когда к двери приблизятся впервые. Мы добавим дальнейшие инструкции, если к двери приблизятся снова, если игрок собрал некоторых, ноне все требуемые батареи. Чтобы проверить, может ли игрок открыть дверь - и поэтому, показать ли инструкции - мы можем использовать сценарий
    BatteryCollect, который мы уже написали. Поскольку у этого сценария есть количество батарей, собранных и сохраненных в статическом Variables, названном обвинением, мы можем подвергнуть сомнению ценность обвинения, чтобы видеть, равняется ли это 4 - значение, что все батареи были собраны. Ограничение доступа Прежде, чем мы дадим инструкции игрока, мы ограничим часть дверного проема нашего сценария PlayerCollisions, чтобы активизировать только, когда игрок собрал все эти четыре батареи. В предыдущей главе мы написали таможенный Functions в сценарии
    PlayerCollisions под названием Дверь (), для которого мы могли накормить параметры, чтобы использовать это для открытия или закрытия дверей, с которыми столкнулся игрок. Это было похоже на это function Door(aClip : AudioClip, openCheck : boolean, animName : String, thisDoor : GameObject){ audio.PlayOneShot(aClip); doorIsOpen = openCheck;

    132 thisDoor.transform.parent.animation.Play(animName);
    } Этот Functions играет звук, он гарантирует, что дверь не может быть вновь открыта, и затем играет мультипликацию его открытие. Мы вызывали эту функцию в пределах кода броска луча, который мы создали в Update () function (векторная линия, которая стоит перед тем же самым направлением как игрок, проверяющий на дверь. Чтобы напомнить Вам, это было похоже на это var hit : RaycastHit; if (Physics.Raycast (transform.position, transform.forward, hit,
    5)) { if(hit.collider.gameObject.tag=="outpostDoor" && doorIsOpen == false){ currentDoor = hit.collider.gameObject;
    Door(doorOpenSound, true, "dooropen", currentDoor);
    }
    } Откройте сценарий PlayerCollisions, щелкая два раза на этом в Проектной группе, и затем определите местонахождение последнего кодового отрывка в Update () function около вершины сценария, который называет Дверь () Functions, чтобы открыться if(hit.collider.gameObject.tag=="outpostDoor" && doorIsOpen == false){
    Door(doorOpenSound, true, "dooropen", currentDoor); Чтобы ограничить доступ перед, все эти четыре батареи собраны, просто добавляют третье условие к этому если утверждение при использовании другой пары ampersands-&&, как показано в следующем кодовом отрывке if(hit.collider.gameObject.tag=="outpostDoor" && doorIsOpen == false
    && BatteryCollect.charge >= 4){ Door(doorOpenSound, true,
    "dooropen", currentDoor); Добавляя следующее условие
    BatteryCollect.charge> = 4 Мы проверяем обвинение сценария BatteryCollect статический
    Variables на ценность 4. Дверь не будет открываться, пока мы не попытаемся войти в дверь, собиравшую все батареи, которые мы

    133 вынули. Использование GetComponent () Когда мы получим доступ, мы должны будем удалить Батарею GUI из экрана. Чтобы сделать это, мы должны будем получить доступ к компоненту Структуры GUI на том объекте. Учитывая, что вызов двери находится в сценарии PlayerCollisions, мы в настоящее время продолжаем работать, мы должны будем обратиться к компоненту, который не находится на том же самом объекте как этот сценарий Первый Диспетчер Человека, но вместо этого находится на объекте
    GUI Батареи. В то время как в сценарии BatteryCollect, мы могли просто сказать guiTexture.enabled = false; Это - то, потому что это было присоединено к тому же самому объекту как компонент GUITexture - это не может быть сделано в сценарии, который не находится на объекте с компонентом GUITexture. Это - то, где GetComponent () команда входит. Ссылаясь на объекту которого есть специфический компонент, к которому Вы должны обратиться и сопровождаемый GetComponent () команда, Вы можете легко приспособить компоненты на внешних объектах. Ниже линии, которая называет Дверь () Functions в, если утверждение Вы только изменились, добавьте следующую линию кода
    GameObject.Find("Battery
    GUI").GetComponent(GUITexture).enabled=false; Здесь, мы используем GameObject. Найдите, определяя название объекта в Иерархии, и тогда использующий точечный синтаксис - мы обращаемся к GUITexture как к параметру GetComponent (). Наконец, мы повреждаем компонент, устанавливая это в ложный в обычной манере - позволил = ложный. Мы не хотим разрушать объект, поскольку мы все еще нуждаемся в сценарии, чтобы существовать в пределах игры, так, чтобы мы могли сослаться на количество батарей, уже собранных. Это - то, почему мы просто повреждаем визуальный компонент. Пойдите в Файл |, Экономят в редакторе сценария, и затем переключаются назад на Unity. Нажмите кнопку Play теперь, чтобы проверить игру, и гарантировать,

    134 что Вы не можете войти в дверь заставы не собрав все эти четыре батареи. Если дело обстоит не так, то перепроверьте свой код, чтобы гарантировать, что он соответствует тому, что мы обрисовали в общих чертах пока. Не забудьте нажимать Игру снова, чтобы прекратить проверять. Намеки для игрока Что, если игрок, менее заинтригованный батареями чем дверь заставы непосредственно, подходит к двери и пытается вступить Мы должны идеально сделать две вещи Скажите игроку в текстовой форме, что дверная зарядка потребностей - в то время как мы могли легко сказать, "Собирает некоторые батареи, намного лучше в условиях gameplay обеспечить намеки, такие как "дверь, кажется, испытывает недостаток во власти. Включите Батарею GUI так, чтобы они могли сказать, что они должны завысить цену батареи. Последний тех двух намеков намного легче осуществить, таким образом мы обратимся что сначала. Батарея намек GUI Переключитесь назад на редактора сценария, где у Вас все еще есть открытый сценарий PlayerCollisions. Если Вы закрыли это по какой-нибудь причине, то помните, что Вы можете просто вновь открыть это от Проектной группы. После заключительной вьющейся скобы, если утверждение мы продолжали работать, еще добавьте, если утверждение, что проверки нате же самые условия как оригинальный - кроме этого времени, мы проверим, является ли Variables обвинения BatteryCollect меньше чем 4: else if(hit.collider.gameObject.tag=="outpostDoor" && doorIsOpen == false && BatteryCollect.charge < 4){ В этом еще, если утверждение, мы будем использовать туже самую линию, которую мы ранее добавили к первому, если утверждение, которое повредило компонент gui Батареи GUITexture, нона сей раз мы позволим это. Еще поместите следующую линию в если утверждение Теперь GUI").
    GetComponent(GUITexture).enabled=true;
    , пойдите в Файл |, Экономят в редакторе сценария и переключаются назад на Unity. Нажмите кнопку Play и тест, что, когда Вы приближаетесь

    135 к двери без любых четырех батарей, Батареи, GUI появляется как визуальный намек. Нажмите Игру снова, чтобы прекратить проверять. Текстовый намек GUI Всякий раз, когда Вы должны написать текст на экране в ом, самый прямой способ сделать, это при использовании компонента GUIText. Создавая новый объект Text GUI из главных меню, Вы получите новый объект и с Преобразовать и с Текстовые компоненты GUI. Создайте одного из них теперь, идя в GameObject |, Создают Другой | Текст GUI. У Вас должен теперь быть новый объект в Иерархии под названием Текст
    GUI и некоторый ой текст на экране, который говорит Гуй Текста, как показано в следующем скриншоте: Переименуйте этот объект в Иерархии, выбирая это и нажимая Возвращение) или
    F2
    (PC). Назовите это TextHint GUI. Выберите объект Text GUI в группе Иерархии, чтобы видеть компонент непосредственно в Инспекторе. Поскольку мы хотим сообщить игроку, мы оставим настоящее положение внутри компонент Transform преобразовать) как 0.5 в X и Текстовые работы расположения Y-GUI в координатах экрана также, таким образом 0.5 в обоих топорах поместит это в середине экрана, требуя внимание игрока. В дополнение к расположению всего элемента Текст GUI также показывает параметр Выравнивания, который работает в подобной манере к параметрам настройки оправдания в программном обеспечении обработки текста. Щелкните/вниз стрелки направо от

    136 параметра Выравнивания и выберите средний центр - это означает, что текст распространится из центра экрана вместо того, чтобы начаться в центре и затем заполнить направо. В то время как Вы можете легко напечатать то, что Вы желаете, чтобы этот Текстовый элемент GUI сказал в Текстовом параметре в Инспекторе (см. следующий скриншот) - мы вместо этого собираемся управлять тем, что это говорит динамически, через scripting. Создайте новый файл JavaScript, выбирая папку Сценариев в Проектной группе. От опускаться меню кнопки Create, выберите
    JavaScript. Переименуйте NewBehaviourScript, который это создает к TextHints, и затем щелкать два раза его изображением, чтобы начать это в редакторе сценария. Начните сценарий, объявляя три variables: static var textOn : boolean = false; static var message : String; private var timer : float = 0.0; Наш первый статический Variables-textO - булевое, поскольку он должен просто действовать как выключатель. Мы покроем больше на этом коротко. Тогда, мы устанавливаем тип последовательности статический
    Variables, названный сообщением, которое мы будем использовать, чтобы передать любую информацию к Текстовому параметру компонента. Эти два variables статичны, поскольку мы должны будем обратиться к ним от отдельного сценария, PlayerCollisions. Наш третий Variables - таймер - является частным, поскольку это не должно быть обращено другими сценариями, ни замечено в Инспекторе. Мы будем использовать этот таймер, чтобы рассчитать с момента, сообщение кажется onscreen, чтобы заставить это исчезнуть после определенного количества времени. Затем, добавьте следующее Начало () Functions, чтобы установить определенные государства, когда сцена начинается

    137 function Start(){ timer =
    0.0; textOn = false; guiText.text = ""; Здесь, мы просто гарантируем, что таймер установлен в 0, что textOn
    Variables ложен (мы не должны видеть инструкцию, когда игра начинается, и что никакой текст в настоящее время не находится в текстовом параметре guiText компонента. Мы делаем это, просто используя две кавычки без текста внутри. Это известно как пустая последовательность. Затем, приложите следующий код к Update () function, который уже существует в сценарии function Update () { if(textOn){ guiText.enabled
    = true; guiText.text = message; timer +=
    Time.deltaTime;
    } if(timer >=5){ textOn = false; guiText.enabled = false; timer = 0.0;
    } Эта простая двухступенчатая процедура делает следующее Проверки на textOn Variables, чтобы стать верный. Когда это, это
    ° Включает компонент GUIText
    ° Устанавливает текстовые параметры, равные вызванному
    Variables последовательности сообщение Начинает увеличивать Variables таймера, используя
    Time (Времени. команда deltaTime Проверки на Variables таймера, чтобы достигнуть ценности 5 секунд. Если это имеет, то это
    ° Наборы textOn булевое к ложному (значение первого, если утверждение больше не будет действительно,
    ° Повреждает компонент GUIText
    ° Сброс Variables таймера к 0.0

    138 Пойдите в Файл |, Экономят в редакторе сценария, и переключаются назад на Unity. Выберите объект GUI TextHint в Иерархии и пойдите в Компонент | Сценарии | TextHints, чтобы добавить сценарий, который Вы только что написали объекту. У нас теперь есть сценарий, который управляет нашими всем, что мы должны сделать, более аккуратно это в действие, вызывая статические variables, которые это содержит. Учитывая, что момент, мы желаем вызвать инструкции, связан со столкновениями с дверью, мы обратимся к этим статическим variables от открытого для сценария
    PlayerCollisions это в редакторе сценария теперь. Еще найдите, если утверждение, которое мы последний раз добавили к Update () function этого сценария, который сопровождает обнаружение броска луча двери, и добавляют следующие две линии
    TextHints.message = "дверь, кажется, должен более двинуться на большой скорости TextHints.textOn = верный Здесь мы посылаем некоторый текст в сообщение статический Variables сценария TextHints и устанавливаем textOn логическую переменную того же самого сценария в истинный. Вот еще полное если утверждение else if(hit.collider.gameObject.tag=="outpostDoor" && doorIsOpen == false && BatteryCollect.charge < 4){
    GameObject.Find("Battery GUI").GetComponent(GUITexture). enabled=true;
    TextHints.message = "The door seems to need more power..";
    TextHints.textOn = true; Поскольку мы включили компонент, устанавливая textOn к истинному, наш сценарий TextHints сделает остальных Пойдите в Файл |, Экономят в редакторе сценария, затем переключаются назад на Unity и Игру прессы, чтобы проверить игру. Приблизьтесь к двери без четырех необходимых батарей, и Вам покажут пять секунд основанного на тексте намека на экран. Нажмите Игру снова, чтобы прекратить проверять игру. Пойдите в Файл |, Экономят в Unity, чтобы обновить Ваше продвижение. Наконец, давайте улучшим вид нашего onscreen текстового намека, добавляя наш собственный шрифт. Используя шрифты Используя шрифты в любом проекте Unity, они должны быть импортированы как актив таким же образом как любая другая часть

    139 СМИ, которые Вы включаете. Это может быть сделано, просто добавляя любой TTF (шрифт TrueType) или OTF (шрифт OpenType) файл к Вашей папке Активов в Искателе (Mac) или Windows Explorer (PC) или в Unity непосредственно, идя в Активы | Импорт Новый Актив.
    1   2   3   4   5   6   7   8   9   10   ...   17


    написать администратору сайта