Создание механики стратегии в реальном времени

Тип:
Добавлен:

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение

высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭКОНОМИЧЕСКИЙ УНИВЕРСИТЕТ»

Факультет Информатики и прикладной математики

Кафедра Информационных систем и технологий

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

на тему: Создание механики стратегии в реальном времени

Содержание

Введение

Список терминов

1. Анализ особенностей жанров и технологий видеоигр

1.1 Обзор жанров

1.2 Обзор платформ

1.3 Обзор средств разработки видеоигр

1.4 Выводы

2. Реализация механики стратегии в реальном времени

2.1 Технические требования к разрабатываемому ПО

2.2 Средства разработки ПО

2.3 Минимальные требования к программному обеспечению

2.4 Разработка архитектуры программы и пользовательского интерфейса

2.6 Тестирование

2.7 Выводы

3. Бизнес-модель

3.1 Обзор рынка видеоигр

3.3 Модель распространения игры

3.4 Платформы для продвижения игры

3.5 Модель позиционирования игры

3.6 Выставки для представления игры

3.7 Издатели независимых игр

3.8 Экономические расчеты

3.9 Целевая аудитория

3.10 Выводы

Заключение

Список литературы

Введение

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

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

Объект исследования -жанр стратегия в реальном времени.

Предмет исследования - механика стратегии в реальном времени.

Целью дипломной работы является разработка базовых возможностей стратегии в реальном времени при помощи программного средства UnityEngine.

Для достижения этих целей в работе решались следующие задачи:

.Анализ жанров видеоигр и средств для их реализации

2.Реализация базовых возможностей механики стратегии в реальном времени

.Создание бизнес-модели

Методы исследования

Анализ литературы

-Изучение документации

Написание кода

Изучение статистики

Структура

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

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

Список терминов

видеоигра разработка программа

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

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

Ресурсы - измеряемый в цифрах показатель, который игрок использует для какой-либо цели, «валюта» в игровом мире. Игрок может их потратить на строительство базы или создание юнита.

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

Потоковое вещание (по-английски «streaming») - термин, использующийся для обозначения трансляции игры одним игроком на видеосервис, чтобы игровой процесс могли посмотреть и другие люди.

1. Анализ особенностей жанров и технологий видеоигр

1.1 Обзор жанров

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

Шутеротпервоголица

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

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

Ролевая игра

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

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

Характеристики персонажа улучшаются походу игры;

-Главная цель, которая проходит сквозь всю игру, так называемая центральная сюжетная ветвь;

Открытый мир;

Боевая система, основанная на способностях персонажа.

Массовая многопользовательская ролевая сетевая игра

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

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

Симулятор

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

Гонки

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

Спортивные игры

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

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

Пошаговая стратегия

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

Стратегия в реальном времени

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

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

Экономическая система

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

Соперничество

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

Мультизадачность

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

«Туман войны»

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

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

Пример стратегии в реальном времени

StarCraft 2

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

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

Самые базовые юниты в игре - «рабочие». Они собирают ресурсы, которые нужны для строительства базы и покупки новых юнитов, также они строят здания. Более продвинутые юниты появляются только при выполнении определенных условий, например, постройки здания или покупки улучшения.

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

.2 Обзор платформ

Sony Playstation 4

Это домашняя видеоигровая консоль, разработанная компанией Sony Interactive Entertainment. Она относится к восьмому поколению видеоигровых систем.

Архитектура консоли похожа на компьютерную. Данное сходство делает разработку игр под обе платформы легче и дешевле. В ее основе лежит AMD Fusion - процессор, который объединяет центральный многозадачный универсальный процессор с графическим параллельным многоядерным процессором. Это называется ускоренное обрабатывающее устройство. Центральный процессор состоит из двух четырехъядерных модулей Jaguar. Графический процессор состоит из 18 вычислительных единиц. Консоль содержит 8 гигабайтов памяти GDDR5, что в 16 раз мощнее ее предыдущей версии, Playstation 3.

Также применяется дополнительный вычислительный чип, который отвечает за загрузку приложений, обновлений и онлайн-сервисы. С помощью него эти задачи могут обрабатываться в фоновом режиме при игре или в «спящем» состоянии. Консоль поддерживает HDR, то есть цвета высокой четкости и яркости. Playstation 4 имеет Blu-Ray дисковод.

Сетевая составляющая предоставляет доступ пользователям к приложениям Playstation Network, которые включают в себя Playstation Store, то есть магазин для игр, Playstation Plus, это подписка для возможности сетевой игры и бесплатных игр, и Playstation Music. Функция Share Play позволяет пользователям приглашать их друзей поиграть с помощью потокового вещания, то есть даже если у них нет копии игры, они могут поиграть в нее. Они могут перехватить управление у основного игрока или присоединиться, если в игру встроен сетевой элемент.One

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

В центре ее архитектуры лежит микропроцессор Jaguar от AMD с двумя четырехъядерными модулями с тактовой частотой 1.75 Гигагерц. В ней содержится восемь гигабайт оперативной памяти DDR3. Три из них уходят на обработку операционной системы, оставшиеся пять - на сами игры.имеет две операционные системы. Одна для игр, другая - для пользовательского интерфейса и других приложений. Последние запускаются под управлением урезанной версии Windows. При запуске консоли то была Windows 8, но затем ее обновили до 10. Такая архитектура позволяет ресурсам быть использованными специально под разные цели, гарантируя, что игры будут всегда в приоритете. Консоль поддерживает приложения из сервиса Universal Windows Platform, который связывает все текущие системы Microsoft: Xbox, Windows 10 и Windows 10 Mobile для смартфонов.

Сервис Xbox Live используется для сетевой игры и использования приложений. Облачная часть позволяет хранить музыку, фильмы, игры и сохраненные достижения. Пользователи могут иметь до 1000 друзей, а с недавнего времени введена поддержка групп по интересам, а функция Looking for group помогает пользователям легче искать других игроков для игры по сети. Сервис Upload Studio позволяет загружать и обрабатывать последние пять минут игрового процесса. В нем есть функция настройки загрузки видео в интернет после определенного события, например, получения достижения. Xbox One поддерживает потоковое вещание на платформы Mixer и Twitch. Приложение SmartGlass предоставляет устройствам на iOS, Android и Windows Phone доступ к некоторым возможностям консоли, таким как включение и выключение, удаленный доступ, покупка контента, а также взаимодействие внутри некоторых игр. С помощью приложения Xbox может вещать игры на мобильные устройства и персональные компьютеры под управлением Windows 10.Switch

Это седьмая консоль от компании Nintendo. Она вышла чуть позже своих текущих конкурентов, Sony Playstation 4 и Xbox One, но все равно относится к восьмому поколению. В отличие от них, Switch является гибридной системой. Она может использоваться и дома с помощью подключения к станции, которая будет транслировать игру на телевизор, но может и на улице с помощью переносного планшета. Консоль имеет отсоединяющиеся котроллеры, которые можно использовать с планшетом в дорогt, а можно соединять друг с другом и играть с ними дома.

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

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

1.3 Обзор средств разработки видеоигр

UnrealEngine 4

UnrealEngine это средство разработки видеоигр от EpicGames, первая версия которого была использована еще в 1998 году с выходом игры Unreal. Изначально средство разработки было сделано только для экшенов от первого лица, но в последствие успешно использовалось и при создании игрв жанресетевых ролевых игр и гонок.

Unrealиспользует язык программирования C++ как основной. Также система содержит в себе язык визуального программирования Blueprint. Он позволяет быстро создавать прототипы, уровни и игровые механики без кода. Это дает возможность проверять идеи и тестировать различные концепты, не потратив при этом много времени на написание кода.

Данный движок предназначен для создания игр для текущего поколения консолей, то есть на более старыеPlaystation 3 и Xbox 360 игру не перенести, персональные компьютеры и мобильные телефоны на базе iOS и Android. Для создания игры на консоли требуется уже история созданных игр для того, поэтому компьютеры - более частый выбор пользователей Unreal.

Одна из главных особенностей в новой версии движка - поддержка веб возможностей. На данный момент Mozillaподдерживает не только двухмерную графику, но и трехмерную с достаточно большим количеством объектов на экране. Четвертая версия Unrealстала бесплатной, вместо 19$ в месяц как в прошлую версию, но теперь требуется отдавать 5% с общих сборов игры, если она собрала более 3000$ за один квартал.

Source

Это движок для разработки трехмерных игр от компании ValveCorporation. Он дебютировал в игре CounterStrikeSource.

Sourceизначально был задуман для постепенного развития, в отличие от своих конкурентов, которые создают все новые и новые версии движков. Он состоит из различных компонентов, которые можно обновлять по отдельности. С помощью площадки Steamони могут обновляться автоматически.

Движок содержит также упрощенный комплект средств разработки, в котором есть множество инструментов, что помогали Valveсоздавать разные части их игры. Внеместьтрикомпонента: Hammer Editor, Model Viewer иFace Poser. HammerEditor - это редактор игровых уровней. ModelViewer - это компонент, который помогает работать с трехмерными моделями. Разработчики также могут создавать анимацию, смотреть связные точки модели и так далее. FacePoserпомогает создавать лицевую анимацию, синхронизировать губы модели с речью, а также занимается жестами рук.

CryEngine

Данный движок создан немецкой компанией Crytek и был впервые применен в игреFarCry. С помощью него разрабатываются игры для персональных компьютеров и консолей нового поколения.

Графические возможности CryEngineявляются одними из самых лучших на сегодняшний день, с ним в данном аспекте может сравниться только UnrealEngine. Движок содержит реалистичную физику и современное освещение. Но так как он довольно мощный, то осваивать его тяжелее, и если у разработчика есть мало опыта, то может быть не рационально его использовать. Движок стоит 9.90$ в месяц, но есть и бесплатная версия, но она может быть использована только для бесплатных проектов или обучающих программ.

GameMaker

Это система для создания игр, созданная Марком Овермаром на языке программирования Delphi.Она поддерживает разработку кроссплатформенных игр разного жанра с помощью метода «DragandDrop», то есть перетаскивания и расставления уже готовых элементов системы, и языка разработки GameMakerLanguage. Изначально движок задумывался как инструмент для создания прототипов.GameMakerпозволяет пользователям создавать видеоигры без изучения языков программирования вроде Javaили C++.

UnityEngine

Это инструмент, позволяющий создавать двух- и трехмерные игры и приложения. Средство поддерживает языки C# и JavaScript. Расчеты физики производятся на базе PhysX от компании NVidia.

Unityподдерживает большой список платформ. В него входят как большие домашние консоли, так и мобильные платформы, например, Androidи iOS. Также средство интегрировано в большинство современных браузеров, что позволяет создавать проекты под них. Одна из главных особенностей движка - удобный перенос проект с одной платформы на другую.

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

Unityимеет большое сообщество разработчиков и магазин, где продаются различные части игр, вроде отдельных модулей, звуков или трехмерных моделей.Движок является бесплатным до тех пор, пока доходы разработчика не будут превышать 10 000 долларов в год. Если цифры будут больше, то компания потребует 75 долларов в месяц.

1.4 Выводы

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

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

2. Реализация механики стратегии в реальном времени

2.1 Технические требования к разрабатываемому ПО

К базовой механике стратегии в реальном времени относят следующие возможности в виртуальном мире:

Постройка здания;

-Создание юнита;

-Передвижение юнита;

-Уничтожение юнита.

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

-Окно ресурсов;

-Карта;

-Обрамление игровых объектов;

-Окно юнита;

-Окно построек;

2.2 Средства разработки ПО

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

Основные компоненты средства разработки

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

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

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

Структуры данных и алгоритмы. Движок имеет средства управления фундаментальными структурами данных, таких как связанные списки, динамические множества, двоичные деревья и так далее, и алгоритмов, таких как поиск, сортировка и так далее.

Менеджер ресурсов. Данный сегмент предоставляет из себя интерфейс для управления данными, которыми оперирует разработчик во время создания игры.

Движок рендеринга

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

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

На данном уровне входят такие компоненты как:

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

Шейдеры. Это вычисляющийся алгоритм, который содержит математические вычисления для цвета каждого пикселя, который зависит от освещения и выбранного материала.

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

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

Внешний интерфейс

Большинство игр используют двухмерную графику, которая наложена трехмерную сцену. Самые часто встречающиеся компоненты:(Head-Up). Это часть визуального интерфейса игрока, отображающаяся на фоне виртуального игрового пространства в процессе игры от первого лица.

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

Интерфейс меню. Это список возможностей, которые представлены пользователю в виде изображений или текста вне игрового процесса.

Физический движок и движок столкновений

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

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

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

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

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

Это бесплатный и открытый набор для создания трехмерных моделей. Также он поддерживает создание анимации, физическую симуляцию, обработку моделей, захват движений, постобработку видео и создание простых приложений. Blender хорошо подходит для небольших студий, которым удобно использовать широкий спектр его функций, а также осуществление быстрой поддержки со стороны разработчика. Это кросс - платформенный набор средств, и он может быть запущен на Linux, Windows, OSX. Интерфейс использует OpenGL.

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

Это интегрированная среда разработки, встроенная в Unity Engine. Она вмещает в себя все базовые функции текстового редактора с дополнительными возможностями для совместных проектных задач.

2.3 Минимальные требования к программному обеспечению

- Процессор: 1.2 Гигагерц;

Оперативная память: 512 Мегабайт;

Видеокарта: 256 Мегабайт;

2.4 Разработка архитектуры программы и пользовательского интерфейса

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

Блок управления основной информацией

Данная часть кода проекта оперирует общей информацией о всех игроках:

Имя. У каждого игрока должно быть имя, чтобы их удобно было различать;

Позиция. Начальная точка, в которой игрок начинает матч;

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

Начальные юниты. Список юнитов, с которыми игрок начинает игру по умолчанию;

Текущие юниты. Список юнитов, которые есть у игрока в текущий момент времени;

Текущее количество баз. Список баз, которые есть у игрока в текущий момент времени;

ИИ. Показывает, человек или искусственный интеллект управляет игроком;

Ресурсы. Количество ресурсов, которыми владеет игрок в текущий момент времени;

Действия

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

Бой

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

Взаимодействие

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

Имитация поведения противника

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

Рисунок 1 - Схема пользовательского интерфейса

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

Рисунок 2 - Окно ресурсов

Карта - один из самых важных элементов интерфейса в стратегии реального времени. Игрок должен опираться на карту, продумывая свои действия и создавая на их основе тактику. Она показывает всю местность, на которой проходит игра. Некоторые стратегии имеют так называемый «туман войны», то есть вся территория закрыта от взгляда игрока до тех пор, пока он не будет исследовать карту с помощью юнитов. Тогда карта открывается постепенно, учитывая возможную дальность каждого юнита, который по ней передвигается.

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

Рисунок 3 - Карта

Окно информации о юните

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

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

Рисунок 4 - Окно информации о юните

Окно действий

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

Рисунок 5 - Окно действий

2.5 Реализация ПО

Основная информация

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

Позиция

В объекте «карта» содержатся две начальные позиции обоих игроков. Они стоят там, где они появятся во время начала игры.

Чтобы игроки оказались в нужных точках при запуске игры, используется метод Instantiate. Он копирует оригинальный игровой объект и возвращает его аналог. Позиция Location.position - это начальная точка игрока, которая указана в его информации. В данном случае на ней появляется один юнит - все, что есть у игрока в начале игры.

var go = (GameObject)GameObject.Instantiate(u, p.Location.position, p.Location.rotation);

Рисунок 6 - Начальные позиции игроков на карте

Чтобы сразу показать начальную позицию, объект «камера» должен быть установлен сверху неё с старта игры. Переменная pos задает координаты, где появляется игрок. Затем устанавливается высота, на которой будет объект «камера». Она содержится в переменной Height.

varpos = p.Location.position;

pos.y = Height;

transform.position = pos;

Информация об игроке

Игра оперирует информаций об игроках, чтобы знать их состояние в любой момент времени.Вся информация хранится в отдельном классе. В нем используется библиотека Unity System.Serializable, которая позволяет удобнее ее показывать, выстраивая иерархию и привязывая к определенному объекту, в данном случае - к игроку.

Рисунок 7 - Информация об игроках

Интерфейс

Интерфейс игры состоит из четырех частей: карта, информация о юните, список возможных действий и окно ресурсов.

Карта

Карта показывает, какую область территории видит игрок. Так как он это делает «через» объект «камера», то необходимо преобразовать его координаты в координаты окна, которое будет перемещаться по карте интерфейса.

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

Затем создается метод, который будет преобразовывать координаты объекта на сцене в координаты окна на карте интерфейса. В случае карты и камеры (Corner.position.z и point.z) в качестве второй координаты берется Z, а в случае окна на карте интерфейса (mapRect.rect.height) - Y. Потому что интерфейс «прикрепляется» к объекту «камера» только при запуске самой игры - в редакторе они расположены на разных осях.

terrainSize = new Vector2 (.position.x - Corner1.position.x,.position.z - Corner1.position.z);= GetComponent<RectTransform> ();2 WorldPositionToMap{mapPos = new Vector2 (.x / terrainSize.x * mapRect.rect.width,.z / terrainSize.y * mapRect.rect.height);mapPos;

}Update () {

ViewPort.position = WorldPositionToMap (Camera.main.transform.position); }

Разделение по цветам

Следующая функция, которую должна выполнять карта - показ юнитов. Игрок должен видеть, что принадлежат ему, а что - противнику. Осуществляется разделение с помощью цвета. Но он не может видеть юнитов противника, если они дальше определенной дистанции от одного из его юнитов.Они должны быть подсвечены цветом своей команды. Для этого используется элемент Unity Image. Он является изображением, которое показывается в графическом интерфейсе.

Создается объект, ему присваивается цвет игрока. И он показывается на карте с помощью метода WorldPositionToMap, который использовался ранее с объектом «камера».

blip = GameObject.Instantiate (Map.Current.BlipPrefab);color = GetComponent<Player> ().Info.AccentColor;.GetComponent<Image> ().color = color;.transform.position = Map.Current.WorldPositionToMap (transform.position);

При запуске игры изображение юнитов противника отключено. Поэтому проверяется, как далеко они от объектов игрока. Осуществляется это при помощи структуры Vector3. Она используетсядля того, чтобы работать с координатами в трехмерном пространстве. Метод Distance возвращает расстояние между двумя объектами. Если это расстояние меньше или равно заданному в коде (переменная VisibleRange), то изображение юнита на карте интерфейса включается. Также он становится видимым в самой игре. Для этого используется класс Renderer. Он отвечает за то, чтобы игрок мог видеть объект на экране.

foreach (var o in oBlips) {active = false;(var p in pBlips) {distance = Vector3.Distance(o.transform.position, p.transform.position);(distance <= VisibleRange) {= true;; } }.Blip.SetActive(active);(var r in o.GetComponentsInChildren<Renderer>()) r.enabled = active;}

Рисунок 8 - Юнит игрока на карте

Окно юнита

Окно юнита содержит его изображение, имя и количество очков «здоровья». С помощью метода SetPic добавляется картинка юнита. Затем показывается текущее число очков «здоровья», максимальное число очков «здоровья», и имя игрока, чтобы легко было различить, кому юнит принадлежит.

InfoManager.Current.SetPic (ProfilePic);.Current.SetLines (,+ "/" + MaxHealth,

"Owner: " + GetComponent<Player> ().Info.Name);

Рисунок 9 - Окно информации о юните

Окно действий

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

public void AddButton(Sprite pic, Action onClick)

{.gameObject.SetActive (true);.GetComponent<Image> ().sprite = pic;.Add (onClick);

}

Управление

Выборюнита

Чтобы подтвердить, что игрок нажал на часть интерфейса, нужен ряд проверок, которые это сделают. Первая - щелкнул ли игрок кнопку вообще. Используется метод класса Input. Он возвращает значение true, если была нажата указанная кнопка мыши. Для левой используется 0, для правой - 1, для средней - 2.(!Input.GetMouseButtonDown (0)) return;

Далее проверяется, есть ли объект интерфейса на месте наведении курсора мыши. Если он есть, то надо убедиться, что объект в игровом мире за ним не выберется. Используется класс EventSystem. Он нужен для обработки ввода информации с мыши и клавиатуры. Метод IsPointerOverGameObject возвращает true, если курсор находится поверх 2D элемента.

var es = UnityEngine.EventSystems.EventSystem.current;(es != null && es.IsPointerOverGameObject ()) return;

Выбор других объектов должен быть отменен при выборе нового. Исключение составляет нажатие правой или левой кнопки Shift. Они дают возможность игроку выбрать несколько объектов.

if (Selections.Count> 0) {

if (!Input.GetKey(KeyCode.LeftShift) && !Input.GetKey(KeyCode.RightShift)) {(var sel in Selections) {(sel != null) sel.Deselect();

}

Selections.Clear(); } }

Далее проверяется, был ли выбран какой-либо объект. Делается это при помощи класса Raycast, который отвечает за «лучевой» поток, работающий с камерой.

Любая точка на камере соответствует линии в пространстве игры. Иногда очень полезно иметь математическое представление подобной линии, и Unity может предоставить это в форме объекта Ray. Ray всегда соответствует точке от «лица» объекта «камера», поэтому класс, который помогает с ней работать, имеет функции ScreenPointToRay и ViewportPointToRay. Данные функции возвращает луч, который содержит начальную точку, и вектор, который содержит направление из этой точки, соответственно.. Наиболее частое использование данного компонента - это осуществлять направленный поток лучей на сцену. Это значит, что камера посылает невидимый «лазерный луч» вдоль Ray до тех пор, он не достигнет коллайдера на сцене. Компонент коллайдер определяет форму объекта для физических столкновений. Коллайдер, который при игре остается невидимым, не должен быть той же формы, что и игровой объект, и обычно даже грубое приближение чаще более эффективно и неразличимо при самой игре. Затемвозвращается информация об объекте и фиксируется точка, где данный луч его настиг. Это удобный способ обнаруживать объект с помощью изображения на экране.

Метод RaycastHit выдает положительный результат только при нажатии на тип объекта Collider. Данный тип определяют форму и физическое взаимодействие объекта с игровым миром.

var ray = Camera.main.ScreenPointToRay (Input.mousePosition);hit;(!Physics.Raycast (ray, out hit)) return;

Далее идет проверка на интерактивность объекта. Если у него нет такого компонента, то он не сможет быть выбранным.

var interact = hit.transform.GetComponent<Interactive> ();

if (interact == null) return;

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

Передвижение юнита

Чтобы юнит смог передвинутся на определенный участок на карте, необходима проверка, нажималась ли кнопка, когда курсор мыши наведен на нужную область. Используется метод, который был описан ранее, но с переменной Terrain Collider. Данный вид объекта «обволакивает» всю карту и осуществляет физическое взаимодействие с ней.

public Vector3? ScreenPointToMapPosition(Vector2 point)

{ var ray = Camera.main.ScreenPointToRay (point);hit;(!MapCollider.Raycast (ray, out hit));

returnhit.point; }

Затем определяется: если игрок нажимает на правую кнопку мыши, то юнит двигается в заданную точку. Но юнит может остановиться раньше. Если юнитов будет много и им всем будет дана команда идти в одно и то же место, то для них может не хватить пространства, и они начнут «толкаться». Поэтому вносится переменная RelaxDistance. Измеряется расстояние, и если дистанция меньше этой переменной, то объект может остановиться.

if (selected && Input.GetMouseButtonDown (1)) {tempTarget = RtsManager.Current.ScreenPointToMapPosition(Input.mousePosition);(tempTarget.HasValue) {(); } }(isActive && Vector3.Distance (target, transform.position) < RelaxDistance) {.Stop ();

isActive = false; } }

ПередвигаетсяюнитприпомощиклассаNavMesh. Он отвечает за систему навигации и позволяет создавать объекты, которые могут передвигаться по миру. Он состоит из следующих компонентов:(Navigation Mesh). Это структура данных, которая описывает поверхности в игровом мире, по которым можно передвигаться, и позволяет найти путь из одного места в другое. Она зависит от геометрии уровня.Agent. Данный компонент помогает создавать объекты, которые будут обходить друг друга, если окажутся на путиу друг друга, а также другие препятствия, которые предусмотреныNavMesh.Mesh Link. Компонент позволяет включить в путь точки навигации, которые могут быть не представлены на поверхности.Obstacle. Данная часть структуры данных позволяет описать двигающиеся препятствия, которые объект должен обходить при продвижении по миру игры. Пока препятствие движется, объекты пытаются обойти его, но как только оно остановилось, NavMesh автоматически ограничивает пространство, или если оно заграждает путь, то объект ищет другой маршрут.

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

Чтобы найти путь между двумя объектами на сцене, сначала сопоставляются начальный и конечный пункт с ближайшими многоугольниками. Затем начинается поиск с первой точки, с помощью посещений всех нужных полигонов, пока объект не доберется до конечной цели. Отслеживание посещенных полигонов осуществляет алгоритм A*.

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

Логика двигательного управления занимает позицию следующего угла и на основе этого вычисляет желаемое направление и скорость, которые нужны для того, чтобы достичь конечного пункта. Использование предполагаемой скорости может привести к столкновению с другими объектами. Тогда компонент, отвечающий за обход препятствий, выбирает новую скорость, которая должна держать баланс между желаемым направлением и обходом будущих столкновений с другими объектами. Тут используется вычисление столкновений с помощью RVO, то есть reciprocal velocity obstacles. Такой подход берет во внимание реактивное поведение всех объектов, подразумевая, что они делают аналогичные рассуждения об избежании конфликтов.

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

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

Просчитываются все препятствия с помощью компонента NavMesh Obstacle. Он позволяет задать в игре все помехи, которые объект должен учитывать при перемещении по миру, также помогает при построении маршрута. В данном проекте к препятствиям относятся перепады высот.

Строительствобазы

При строительстве базы за курсором мыши следует полупрозрачный силуэт здания, чтобы игроку было легче определиться с местом, куда он его может поставить. Здание нельзя сделать на неровных поверхностях или на воде. Все 3D модели являются собранием вершин (Vertices). Такая вершина - пересечение трех и более углов модели. Они считываются при помощи метода класса Mesh.

publicboolIsGameObjectSafeToPlace(GameObjectgo) {verts = go.GetComponent<MeshFilter> ().mesh.vertices;obstacles = GameObject.FindObjectsOfType<NavMeshObstacle> ();cols = new List<Collider> ();(var o in obstacles) {.Add (o.gameObject.GetComponent<Collider> ()); }

Проверяется каждая вершина. Так как они относятся к пространству объекта, то есть к модели объекта «база», с помощью метода TransfromPoint необходимо узнать их позицию в мире игры. Затем проверяются X и Z координаты и столкновение с физической оболочкой объекта.

foreach (var v in verts) {hit;vReal = go.transform.TransformPoint (v);onXAxis = Mathf.Abs (hit.position.x - vReal.x) < 0.5f;onZAxis = Mathf.Abs (hit.position.z - vReal.z) < 0.5f;hitCollider = cols.Any (c => c.bounds.Contains (vReal));(!onXAxis || !onZAxis || hitCollider) {false; } }

Модель базы должна следовать за курсором мыши. Здесь используется функция ScreenPointToMapPosition, которая отслеживает его движение. Затем место передается в позицию объекта.

vartempTarget = RtsManager.Current.ScreenPointToMapPosition (Input.mousePosition);

transform.position = tempTarget.Value;

ОтменитьдействиеигрокможетспомощьюкнопкиEscape. Если он ее нажимает, то объект удаляется.

if (Input.GetKeyDown (KeyCode.Escape)) GameObject.Destroy (active);

Игра должна визуально показывать, возможно ли строить здание или нет. Для этого используется структура Color, и задаются два цвета: красный и зеленый.

Color Red = new Color (1, 0, 0, 0.5f); = newColor (0, 1, 0, 0.5f);

Если игрок захочет поставить базу далеко от юнита, то цвет модели станет красным.

if (Vector3.Distance (transform.position, Source.position) > MaxBuildDistance) {.material.color = Red;; }

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

Создание здания.

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

if (RtsManager.Current.IsGameObjectSafeToPlace (gameObject)) {.material.color = Green;(Input.GetMouseButtonDown (0)) {go = GameObject.Instantiate (BuildingPrefab);.transform.position = transform.position;.Credits -= Cost;.AddComponent<Player> ().Info = Info;(this.gameObject);

}

} else { rend.material.color = Red; }

Имитация поведения противника

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

В данном проекте имитация представляет собой другого игрока, который управляет юнитами на карте. Он должен противостоять живому игроку.Имитация выполнена с помощью метода Сортированного листа. В нем каждое действие оценивается на основе определенных условий, оценка происходит в каждый момент времени игры. Данный метод является серединой между Древом поведений и методом Конечных состояний. Несмотря на то, что оценка происходит у каждого состояния отдельно, решение о том, какое же действие будет происходить следующим, отделено и принимается на основе данных оценок.

Рассматривается два аспекта каждого действия: как оно оценивается и как оно исполняется.

Действия:

Создание базы;

Создание юнитов;

- Имитация боя;

Создание базы;

Оценка.

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

if (support == null)= AiSupport.GetSupport (gameObject);(support.Player.Credits < Cost || support.Drones.Count == 0)0;(support.CommandBases.Count * UnitsPerBase <= support.Drones.Count)

return 1;0;

Исполнение

Каждый юнит проверяется на возможность выполнения действия. Ему дается три попытки, чтобы это сделать. Количество попыток выражено в переменной TriesPerDrone. Затем используется метод insideUnitSphere. Он возвращает случайную точку в сфере с радиусом 1. Так как такое расстояние достаточно маленькое, радиус должен быть умножен на число, которое будет более подходящим для возможности строительства. Для позиции здания задается Y величина с помощью метода SampleHeight. Она возвращает высоту карты. И у игрока отнимаются ресурсы за постройку базы.

foreach (var drone in support.Drones)

{(int i = 0; i < TriesPerDrone; i++)

{pos = drone.transform.position;+= Random.insideUnitSphere * RangeFromDrone;.y = Terrain.activeTerrain.SampleHeight (pos);.transform.position = pos;(RtsManager.Current.IsGameObjectSafeToPlace (go)) {.Player.Credits -= Cost;; } } }

Создание юнитов

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

if (bases == 0) return 0;

if (drones >= bases * DronesPerBase) return 0; 1;

Имитация боя

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

Copyright © 2018 WorldReferat.ru All rights reserved.