1 Анализ информации и постановка задачи
1.1 Мобильные игры
Благодаря огромному количеству пользователей мобильных устройств, становится всё больше разработчиков игр, многие из которых занимаются созданием игр исключительно для мобильных игр. Кроме того, основная демографическая группа (подростки и взрослые) относится к числу тех, кто с наибольшей вероятностью владеет смартфоном.
Часть популярности мобильные игры завоевали именно из-за того, что есть возможность играть где угодно, даже без доступа в интернет и отсутствия телефонного сигнала. Приложение работает через жесткий диск телефона точно также, как и на портативном компьютере [1].
Также стоит отметить, что игры на мобильные телефоны стоят в разы меньше чем игры на персональные компьютеры и консоли. Кроме того, практически у каждого человека есть мобильный телефон, чего не скажешь про компьютеры и консоли. Низкая стоимость игр для мобильных телефонов так связанна ещё с один преимуществом – огромным разнообразием мобильных игр. Поскольку мобильные игры можно производить быстрее и дешевле, чем другие видеоигры, разработчики могут пойти на больший риск, опробовав новые концепции или идеи. Разработчики не так много теряют, если экспериментальная игра непопулярна. В результате мы получаем замечательную креативность в мобильных играх. Кроме того, на одном и том же рынке могут конкурировать как крупные игровые корпорации, так и крошечные дизайнерские фирмы. Низкая себестоимость производства обеспечивает дальнейшее разнообразие игрового рынка и дальнейшее разнообразие мобильных игр в целом.
1.2 Обзор существующих мобильных платформ
Несмотря на то, что современные смартфоны имеют достаточно небольшой размер, их легко можно назвать карманными компьютерами. Такими их делают операционные системы, которые являются главным отличием смартфона от обычного телефона [2].
На данный момент самыми распространенными операционными системами для мобильных устройств являются:
– Android – это операционная система для таких устройств как смартфоны, планшеты, ноутбуки, фитнес-браслеты и многих других. Сначала операционная система разрабатывалась компанией Android Inc., однако позже её купила компания Google. В последствии Google создала альянс Open Handset Alliance из 84 компаний, таких как Google Inc., Samsung, Asus, Nvidia, HTC и многих других, которые поддерживают эту платформу и занимаются её дальнейшим развитием. Android дает возможность создавать Java-приложения, которые управляют устройством через разработанные Google библиотеки;
– iOS – операционная система, выпущенная в 2007 году компанией Apple. Главное отличие этой операционной системы заключается в том, что она выпускается только для устройств, которые производит компания Apple. Изначально операционная система была на таких устройствах как IPhone и IPod touch, однако позже эту операционную систему также получили IPad и Apple TV;
– Windows Phone – мобильная операционная система, которую разработала компания Microsoft и выпустила в 2010 году. Однако в 2017 году компания заявила, что перестанет создавать новые устройства, а также будет прекращена работа над обновлениями Windows 10 Mobile. В 2019 году компания полностью прекратила поддержку Windows 10 Mobile и на данный момент этой операционной системой практически никто не пользуется;
– Baba – мобильная платформа, созданная компанией Samsung в 2010 году. В 2013 году поступило заявление о том, что платформа bada объединиться с другой мобильной платформой под названием Tizen;
– Open wedOS – встраиваемая открытая операционная система для смартфонов и интернет-планшетов. Изначально была разработана компанией Palm, но в 2013 году поддерживать и разрабатывать эту операционную систему стала компания LG Electronics вместе с открытым обществом разработчиков;
– Symbian OS – операционная система, которая занимала большую часть рынка до начала 2010 года.
С каждым годом растет количество пользователей, которые пользуются операционной системой Android. В 2021 году у Android насчитывается 2,8 миллиарда активных пользователей, что составляет 75% доли на мировом рынке. Исходя из этих данных, чаще всего разработчики предпочитают создавать мобильные приложения именно для Android. На сегодняшний день Android является одной из самых популярных и интересных систем, которая позволяет пользователю настроить систему под себя.
Несмотря на огромный успех, есть шанс того, что система Android рано или поздно перестанет поддерживаться компанией Google, которая разрабатывает альтернативную операционную систему, чтобы ее заменить. Делается это по причине того, что существующая система до сих пор имеет ряд недочетов, которые нельзя исправить полностью.
1.3 Обзор существующих игровых движков
На сегодняшний день число активных геймеров превышает уже 3 миллиарда. И большинство из них хоть раз задумывались о том, как создать свою игру. Для упрощения разработки игры лучше всего использовать игровой движок, который обеспечит необходимым набором инструментов [3]. Среди большого разнообразия игровых движок, можно выделить несколько, которые лучше всего подойдут для создания мобильных игр:
– Unity – межплатформенная среда разработки игр в которой для написания скриптов используются языки программирования C# и JavaScript. Ранее помимо этих языков программирования также использовался такой язык как Boo (диалект Python). Движок разработан компанией Unity Technologies в 2005 году;
– Unreal Engine – игровой движок, который был разработан компанией Epic Games и до сих пор ею поддерживается. Несмотря на то, что многие разработчики считают, что Unreal Engine подходит лишь для создания больших проектов, этот движок достаточно универсален и на нем также можно разрабатывать мобильные игры;
– Defold – движок с набором инструментов для создания 2D игр, поэтому сделать 3D игру будет достаточно тяжело, однако всё же можно. В дальнейшем разработчики игрового движка собираются улучшить набор инструментов и для 3D игр;
– Corona SDK – фреймворк для создания 2D игр. Он рекомендован тем, кто только начинает свой путь в разработке мобильных игр, так как достаточно легок в освоении;
– Gobot 3D – игровой движок для создания 2D и 3D игр. Gobot дает возможность разработчикам создавать свои игры с нуля, используя лишь некоторые инструменты для создания элементов графики, музыкальных треков и т.д.
Внутреннее устройство игровых движков можно разделить на два типа – это полноценное ПО и фреймворки. Полноценное ПО – это программа, которая предоставит полноценный редактор для создания игр, а также поможет собрать готовый проект воедино. А фреймворк – это набор нужных функций и классов, которые понадобятся для разработки игры с нуля и собирать проект придется самостоятельно. Так же различия этих двух типов заключается в том, что в случае фреймворка, игру придется писать на языке программирования, который был использован для написания этого фреймворка, а если мы берем полноценное ПО, то в нём можно писать на таких языках программирования как C++, JavaScript, Lua и C#, а также использовать визуальное программирование.
Для разработки средних по сложности игр под Android и компьютер лучше всего подойдет игровой движок Unity, в основном благодаря достаточно большому выбору различных ассетов. Также у Unity есть возможность экспортировать и импортировать готовые скрипты, что даёт возможность разработчикам упростить работу при создании различных приложений.
По данным официального сайта Unity, их движком пользуются более 50% разработчиков игр, 20% пользователей предпочитают игровой движок Unreal Engine, а оставшиеся 30% приходятся на другие игровые движки [4].
1.4 Классификация лабиринтов и их генерирование
Лабиринты, включая их алгоритмы создания, можно разделить на семь различных классификаций [5]:
– размерность;
– гиперразмерность;
– топология;
– тесселяция;
– маршрутизация;
– текстура;
– приоритет.
К классу размерности относится определение количества заполняемых лабиринтом измерений в пространстве. Этот класс можно разделить на три типа: двухмерные, трехмерные и более высокие размерности. Практически все лабиринты относятся к двухмерному типу размерности, их можно нарисовать на обычном листе бумаги и двигаться по нему. В отличие от двухмерного типа лабиринтов, в трехмерном типе проходы идут не только в четыре стороны, в нём также можно подниматься наверх или опускаться вниз. К более высоким размерностям уже относятся четырехмерные лабиринты и более многомерные. В таких лабиринтах обычно есть так называемые порталы в другие измерения, например, в будущее или прошлое. Помимо основных трех типов есть ещё переплетение, когда проходы могут накладываться друг на друга и этот тип чаще всего относят к двухмерным лабиринтам.
Размерность объекта, который двигается через лабиринт, относят уже к классификации гиперразмерности. Здесь также идёт разделение на несколько типов: не-гиперлабиринты, гиперлабиринты и гипер-гиперлабиринты. Не-гиперлабиринтами считаются практически все лабиринты, даже если они созданы в высокой размерности. В них идет работа с небольшими объектами, например, с шариком или самим игроком и двигаются они от точки к точке, а проложенный маршрут образует линию. В этом лабиринте достаточном легко просчитать количество вариантов выбора в каждой точке. К гиперлабиринтам относятся те лабиринты, в которых решаемый объект не является простой точкой. Гиперлабиринты состоят из линий и при перемещении по пути они образуют поверхность. Этот тип лабиринтов существует только в 3D или в среде с большой размерностью. В гиперлабиринтах, чтобы избежать сжатия линии в точку, делают линию решения бесконечной или же её конечные точки располагают уже за приделами гиперлабиринта, иначе можно считать это не-гиперлабиринтом. Последним типом гиперразмерности считается гипер-гиперлабиринт в котором решаемым объектом будет плоскость, которая образует объемную фигуру при перемещении по пути. Такие лабиринты существуют только в 4D или в среде большей размерности.
К описанию геометрии пространства лабиринта, в котором он существует как целое, относится класс топологии. В этом классе всего два типа. Обычный, то есть стандартный лабиринт в эвклидовом пространстве и тип planair. Ко второму типу относятся лабиринты, у которых края лабиринта соединены интересным способом, например, лабиринт на поверхности куба.
Тесселяция отвечает за геометрию отдельных ячеек из которых состоит весь лабиринт. У тесселяции достаточно много типов. Стандартный лабиринт с прямоугольной сеткой будет относится к типу ортогональный. В нем ячейки имеют проходы, которые пересекаются под прямыми углами. Также ортогональный тип лабиринтов можно назвать гамма-лабиринтом. Дельта-лабиринтами будут называться лабиринты, которые состоят из соединенных треугольников. У каждой ячейки в дельта-лабиринтах может быть до трёх соединенных с ней проходов. Лабиринты, составленные из шестиугольников, называются сигма-лабиринтами, здесь уже у каждой ячейки может быть до шести проходов. Тета-лабиринты состоят из концентрических окружностей проходов, у них начало или конец находятся на внешнем крае окружности, а другой располагается в центре. Ипсилон-лабиринты состоят из соединённых восьмиугольников или квадратов, в них каждая ячейка может иметь до восьми или четырёх проходов. Дзета-лабиринт расположен на прямоугольной сетке, только в дополнение к горизонтальным и вертикальным проходам допускаются диагональные проходы под углом 45 градусов. Термин «омега» относится практически к любому лабиринту с постоянной неортогональной тесселяцией. Дельта-, сигма-, тета- и ипсилон-лабиринты относятся к этому типу, как и многие другие схемы, которые можно придумать, например, лабиринт, состоящий из пар прямоугольных треугольников. Crack-лабиринт – это аморфный лабиринт без постоянной тесселяции, в котором стены и проходы расположены под случайными углами. Фрактальный лабиринт – это лабиринт, составленный из меньших лабиринтов. Фрактальный лабиринт из вложенных ячеек – это лабиринт, в каждой ячейке которого размещены другие лабиринты, и этот процесс может повторяться несколько раз. Бесконечно рекурсивный фрактальный лабиринт – это истинный фрактал, в котором содержимое лабиринта копирует себя, создавая по сути бесконечно большой лабиринт.
Наиболее интересным классом в генерации лабиринтов считается маршрутизация, которая связанна с разновидностями проходов в пределах геометрии. Существует пять типов маршрутизации: идеальный, плетёный, одномаршрутный, разреженный и частично плетёный. Идеальным типом лабиринта считается лабиринт без петель, замкнутых цепей и без недостижимых областей. Так же его можно назвать лабиринтом с одиночным соединением. В плетенном лабиринте отсутствуют тупики, вместо этого используются проходы, которые замыкаются и возвращаются друг к другу. Исходя из этого, плетенный лабиринт может оказаться намного сложнее идеального типа лабиринта такого же размера, если его качественно сделать. Одним из самых простых лабиринтов является одномаршрутный лабиринт, который состоит из одного очень длинного и извивающегося прохода, постоянно меняющего своё направление. Разреженный лабиринт не прокладывает проходы через каждую ячейку, то есть некоторые из них не создаются. Это подразумевает наличие недостижимых областей, то есть он в некотором смысле противоположен плетёному лабиринту. Похожую концепцию можно применить и при добавлении стен, благодаря чему можно получить неравномерный лабиринт с широкими проходами и комнатами. Частично плетёный лабиринт – это смешанный лабиринт, в котором есть и петли, и тупики. Слово «плетёный» можно использовать для количественной оценки, то есть «лабиринт с сильным плетением» – это лабиринт со множеством петель или убранных стен, а в «лабиринте со слабым плетением» их всего несколько.
Стили проходов различных маршрутизаций и геометрий будет описывать классификация по текстуре. С помощью показателя пролетов можно определить насколько долго будут идти длинные проходы до момента пока не появится вынужденный поворот. Среди различных видов лабиринтов присутствуют такие лабиринты, которые имеют симметричные проходы пример показан на рисунке 1. Лабиринты могут быть как частично, так и полностью симметричны. В лабиринте со смещёнными проходами прямые проходы склонны больше идти в одном направлении, чем в других. Также есть однородные алгоритмы, которые генерируют все лабиринты с равной вероятностью.
Рисунок 1 – Симметричный лабиринт
Существует два основных типа процессов создания лабиринтов: добавляющие стены и вырезающие проходы – это всё показывает такая классификация как приоритет. Алгоритмы, для которых приоритетом являются стены, начинают с пустой области, в процессе работы добавляя стены. А алгоритмы, приоритетом которых являются проходы, начинают со сплошного блока и в процессе работы вырезают в нём проходы. Помимо выше перечисленных есть ещё множество различных лабиринтов и классификаций, и каждый из них достаточно интересный.
Для того, чтобы создать стандартный идеальный лабиринт нужно постепенно добавлять в лабиринт сегменты стен, при этом не забывая о том, что в нем должны отсутствовать петли и изолированные области. Для создания лабиринта без тупиков по сути нужно добавлять в лабиринт сегменты стен случайным образом, но делать так, чтобы каждый новый добавляемый сегмент не приводил к созданию тупика. При создании трехмерных лабиринтов, а также лабиринтов большей размерности за основу можно взять алгоритм создания стандартного идеального двухмерного лабиринта, однако из каждой ячейки нужно будет случайно двигаться в шесть, а не в четыре ортогональные ячейки. Crack-лабиринты создаются точно также, как и идеальные лабиринты с добавлением стен, только в них нет отчётливой тесселяции, за исключением случайного расположения пикселей. Planair-лабиринты с необычной топологией обычно создаются как массив из одного или нескольких лабиринтов, или частей лабиринтов, в которых определён способ соединения краёв друг с другом.
?
2 Unity
2.1 Описание Unity
Первая версия Unity была замечена в 2005 году. Игровой движок был анонсирован на Глобальной конференции создателей. В начале Unity был специализирован лишь только для компьютеров Mac, а позднее вышло обновление, позволяющее работать под Windows. В следующих версиях постепенно добавлялись и иные платформы [6].