Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unity_в_действии_Джозеф_Хокинг_Рус.pdf
Скачиваний:
82
Добавлен:
21.06.2022
Размер:
26.33 Mб
Скачать

8.5. Заключение      213

DisplayItems(); return true;

}

...

Листинг 8.23. Добавление кнопки здоровья в базовый UI

...

}

}

}

Выделенный курсивом код в сценарии уже был, foreach (string item in itemList) { ¬ здесь он приведен в качестве точки отсчета.

if (GUI.Button(new Rect(posX, posY, width, height), "Equip "+item)) { Managers.Inventory.EquipItem(item);

}

if (item == "health") { ¬ Начало нового кода.

if (GUI.Button(new Rect(posX, posY + height+buffer, width, height), "Use Health")) { ¬ Запуск вложенного кода при щелчке на кнопке.

Managers.Inventory.ConsumeItem("health");

Managers.Player.ChangeHealth(25);

}

}

posX += width+buffer;

Новый метод ConsumeItem(), по сути, диаметрально противоположен методу AddItem(); он проверяет наличие указанного элемента в инвентаре и уменьшает значение, если таковой не обнаружен. Умеет он реагировать и на ситуацию, когда количество элементов уменьшается до нуля. Код UI вызывает этот новый метод работы с инвентарем, который, в свою очередь, вызывает метод ChangeHealth(), с самого начала присутствовавший в сценарии PlayerManager.

Если вы соберете несколько пакетов здоровья, а затем ими воспользуетесь, на консоли появятся соответствующие сообщения. Вот вы и узнали еще один вариант использования элементов инвентаря!

8.5. Заключение

Управлять устройствами можно как посредством нажатия клавиш, так и с помощью триггеров столкновения.

Объекты, для которых включена имитация реальных физических явлений, могут реагировать на силу столкновения и зоны триггеров.

Сложными игровыми состояниями управляют через специальные объекты общего доступа.

Коллекции объектов можно систематизировать с помощью таких структур данных, как List или Dictionary.

Отслеживание подготовленных состояний элементов инвентаря позволяет влиять на другие части игры.

Ч а с т ь III УВЕРЕННЫЙ ФИНИШ

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

Вы уже на финишной прямой, осталось всего четыре главы!

9

Подключение игры

к Интернету

33 Генерирование графики для неба с помощью скайбокса 33 Скачивание данных с помощью веб-объектов в сопрограммах

33 Анализ распространенных форматов данных, таких как XML и JSON 33 Отображение скачанных из Интернета изображений 33 Отправка данных на веб-сервер

Вэтой главе мы рассмотрим способы отправки и получения данных по сети. Все созданные нами проекты, представляющие различные игровые жанры, располагались исключительно на вашей машине. А как известно, подключение к Интернету и обмен данными становятся все более важным аспектом игр всех жанров. Многие игры существуют исключительно в Интернете с постоянным подключением к сообществу игроков; для их обозначения используется аббревиатура MMO (Massively Multiplayer Online — массовая многопользовательская онлайновая игра). Шире всего известны так называемые массовые многопользовательские ролевые онлайновые игры (Massively Multiplayer Online Role-Playing Games — MMORPG). Даже если постоянное подключение для игры не требуется, современные видеоигры оснащены такими функциями, как, например, отправка сведений о набранных очках в глобальный список лучших результатов. В Unity они тоже поддерживаются, так что мы подробно рассмотрим данную функциональность.

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

ЧТО ТАКОЕ HTTP-ЗАПРОСЫ?

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

216      Глава 9. Подключение игры к Интернету

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

Популярность HTTP-запросов объясняется их надежностью. При проектировании как самих запросов, так и предназначенной для их обработки инфраструктуры, закладывается устойчивость к сбоям и способность справляться с самыми разными видами неполадок.

Разрабатываемая в Unity онлайновая игра на базе HTTP-запросов будет, по сути, толстым клиентом (thick client), взаимодействующим с сервером в стиле Ajax. Для сравнения вспомните, как работают современные одностраничные веб-приложения (в отличие от старых добрых веб-страниц, генерируемых на стороне сервера). Хорошее знание принципов старой школы порой заставляет опытных разработчиков делать неверные шаги. Видеоигры зачастую имеют куда более строгие требования к производительности, чем веб-приложения, и именно эта разница в требованиях может влиять на проектные решения.

ВНИМАНИЕ  Для веб-приложений и видеоигр понятие времени может иметь разный смысл. При обновлении скачиваемой страницы половина секунды, как правило, вообще ничего не значит, в то время как в разгар активных действий в игре подобная задержка способна испортить все удовольствие. Понятие «быстро» целиком и полностью зависит от ситуации.

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

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

1.Настройка натурной сцены (а именно, создание неба, реагирующего на данные метеонаблюдений).

2.Написание кода, запрашивающего прогноз погоды из Интернета.

3.Анализ ответа и корректировка сцены в соответствии с полученной информацией.

4.Скачивание и отображение графики.

5.Отправка данных на ваш собственный сервер (в нашем случае это будут записи журнала о погоде за прошедшее время).

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