Обоснование выбора инструментальных средств.
Для разработки данного программного продукта была выбрана среда разработки Unity, так как она предоставляет наиболее широкие возможности для программирования приложений в ОС Windows. Unity — это полноценный игровой движок, рассчитанный на то, что весь процесс разработки будет происходить в поставляемом в комплекте Редакторе. Обычно такая постановка вопроса означает нежизнеспособное ПО, но Unity не из этого разряда, итак, перечислим его плюсы:
· Свой IDE — он сочетает редактор сцен, редактор игровых объектов, и стандартный редактор скриптов.
· Возможности для скриптинга — в отличие от UDK, в котором писать можно только на встроенном языке, в Unity доступны три языка: JavaScript, C#, и диалект питона под названием Boo[7].
· Кроссплатформенность — поддерживаются Windows, MacOS, Wii, iPhone, iPod, iPad, Android, PS3 и XBox 360.А также Web. Однако не все из этих платформ доступны в бесплатной версии программы
· Производительность и масштабируемость.
· Основные элементы Unity – это объекты (» GameObject «) и компоненты (» MonoBehaviour «). Освоив эту концепцию, вы уже можете работать с Unity.
· Unity может похвастаться самым широким сообществом специалистов среди всех игровых движков, поэтому если у вас возникнет вопрос — ответ на него найдется. Пусть Unity и поддерживает множество языков для написания сценариев, документация по каждому из них очень основательная.
Также рассматривались альтернативные варианты:
NeoAxis Game Engine SDK - Отличный игровой движок с простым интерфейсом и качественной графикой. Спроектирован для создания игр практически в любых жанрах.
Создан на основе движка Ogre3D. В качестве языка программирования используется C# и C++ и платформа .NET, но есть возможность обходиться без программирования благодаря специальным библиотекам готовых действий. Для движка имеются различные дополнения и расширения, разработанные сторонними пользователями. Имеется возможность экспорта для 3dsMax и Maya, Autodesk Softimage и Blender. Поддерживаются шейдеры, освещение и тени PSSM (Parallel-Split Shadow Map).
Основное достоинство данного игрового движка - максимальное удобство и простота. К тому же, движок разработан отечественными программистами, благодаря чему в нём есть русский язык по умолчанию. При покупке лицензионной версии вы получаете качественную техническую поддержку на своём родном языке.
«CryENGINE 3» - это вершина современных игровых движков, обеспечивающая фотореалистичную графику с поддержкой DirectX 11 и шейдеров третьего поколения. Третья версия движка создана в 2009 году. На этом движке созданы серии игр «Far Cry» и «Crysis», онлайн игра «Aion», а также десятки менее известных компьютерных игр [13].
Компания «Crytek» приняла решение бесплатно распространять этот, и без того популярный, игровой движок. Но бесплатность действует ровно до того момента, пока Вы не захотите официально выпустить игру, созданную на этом движке. Лицензионная версия стоит дороже всех аналогичных программ, но она стоит этих денег.
На «CryENGINE 3» можно создавать игры для платформ: PC, PlayStation 3 и Xbox 360.
Импортировать текстуры можно из графических программ «3ds max», «Maya» а также из предыдущих версий движка.
Движок «CryENGINE 3» оказался очень популярным, у него появилось целое русскоязычное сообщество, благодаря этому Вы без труда сможете найти всевозможные обучающие материалы, а также ответы на конкретные вопросы.
Конструкторы игр:
Construct 2 - Очень простой конструктор 2D игр. Знание языков программирования не обязательно.
В отличие от «Game Maker», в «Construct 2» можно создавать игры для iOS, Android, Facebook, Chrome Web Store, Desktop Windows, Windows 8 Apps, Web (HTML5), Kongregate и для множества других платформ.
Это более качественная программа, но и бесплатна она до того момента, пока вы не захотите продавать свою игру. В этом случае нужно будет купить лицензионную версию. Так же на сайте разработчиков есть специальный магазин, где вы можете покупать строительные ресурсы для своей игры: наборы звуков, музыку, подробные инструкции.
ГЛАВА 2. ПРОЕКТНАЯ ЧАСТЬ
2.1 Описание игры
Компьютерная игра «Adventure» является однопользовательской.
«Adventure» - это занимательная логическая игра, цель которой – добраться до выхода, избегая встречи с противниками, преодолевая препятствия, и собирая бонусы.
Adventure состоит из уровней, представляющих собой заранее расположенные платформы с противниками, и препятствиями. Противники двигаются независимо от передвижения главного героя, который имеет возможность как обойти, так и уничтожить их.
Таким образом, задача игрока состоит в том, чтобы обойти все препятствия и покинуть уровень.
2.2 Техническое задание
Введение
Настоящее техническое задание распространяется на разработку игры «Adventure».
1. Основание для разработки
1.1 Программа разрабатывается на основе требований, предоставленных местом прохождения обучения.
1.2 Наименование работы:
Разработка игры «Adventure».
1.3 Исполнители Студент 4 курса группы ПОВТ-241 Соболев А.П.
1.4 Соисполнителей нет.
2. Назначение разработки
Разработка игры, для развития логики, обучения главным игровым механикам, и увеличения концентрации и наблюдательности, за счёт грамотно логически построенных уровней.
3. Технические требования
Разрабатываемое ПО должно обеспечивать:
· Понятный пользователю интерфейс
· Плавную работу программы
· Постоянную, верную генерацию новых уровней
· Взаимодействие всех модулей
Требования к надежности.
Для обеспечения надежности необходимо проверять корректность нажимаемых клавиш.
Требования к составу и параметрам технических средств уточняются на этапе концептуального проектирования программы.
Требования к информационной и программной совместимости.
Рекомендуемые требования:
Программа должна работать на платформах IOS, Linux, Vista, Windows 7/ 8 / 10.
ОЗУ - 1 Гб.
Процессор intel Pentium 1.2 Гц.
1 Гб свободного места на диске.
Требования к транспортировке и хранению.
Программа предоставляется на лазерном носителе информации. Программная документация представляется в электронном и печатном виде.
Специальные требования:
· программное обеспечение должно иметь дружественный интерфейс, рассчитанный на пользователя (в плане компьютерной грамотности) квалификации;
· ввиду объемности проекта задачи предполагается решать поэтапно, при этом модули ПО, созданные в разное время, должны предполагать возможность наращивания системы и быть совместимы друг с другом, поэтому документация на принятое эксплуатационное ПО должно содержать полную информацию для работы программистов с ним;
4. Основные документы.
Основными документами, регламентирующими разработку будущих программ, должен быть документ Единой Системы Программной Документации: руководство пользователя, руководство администратора, описание применения.
5. Техническо-экономические показатели:
Экономическая выгода, полученная от внедрения аппаратно-программного комплекса.
6. Порядок контроля приемки
После передачи Исполнителем отдельного функционального модуля программы Заказчику последний имеет право тестировать модуль в течении 7 дней. После тестирования Заказчик должен принять работу по данному этапу или в письменном виде изложить причину отказа принятия. В случае обоснованного отказа Исполнитель обязуется доработать модуль.
Модель UML
UML — язык графического описания для объектного моделирования в области разработки программного обеспечения, моделирования бизнес-процессов и системного проектирования UML является языком широкого профиля, это — открытый стандарт, использующий графические обозначения для создания абстрактной модели системы, называемой UML-моделью.
UML-диаграмма – это специализированный язык графического описания, предназначенный для объектного моделирования в сфере разработки различного программного обеспечения. Данный язык имеет широкий профиль и представляет собой открытый стандарт, в котором используются различные графические обозначения, чтобы создать абстрактную модель системы. В данном проекте была создана диаграмма последовательности (рис.1).
Рисунок 1. Диаграмма последовательности
На данной диаграмме объекты располагаются слева направо.
2.4 Диаграмма компонентов.
Рисунок 2. Диаграмма компонентов
Главным компонентом диаграммы (рис 2.) является «Игрок», который так или иначе взаимодействует с другими компонентами. То есть может сталкиваться с ними, наносить урон, собирать, уничтожать или передвигаться по ним.
Компонент платформа является статическим объектом, который не дает игроку упасть ниже уровня камеры, при этом позволяя ему отталкиваться. При взаимодействии происходит проверка, является ли игровой объект платформой, если является, то персонаж может передвигаться, так же происходит проверка на метод Jump (прыжок) если платформа находится под объектом, наш персонаж может совершить прыжок, если платформа под ним нету, герой не может совершить прыжок, это сделано для того чтобы избежать множественных прыжков уже в воздухе
ГЛАВА 3. ОПИСАНИЕ ПРОЕКТА
3.1 Описание противников
В данном проекте была создана игра, обладающая простым и интуитивно понятным интерфейсом (рис.3), на игровой сцене присутствуют объекты: стреляющий противник, стационарный противник, аптечка, главный герой, статическое препятствие.
Рисунок 3. Интерфейс игры
Игровая сцена состоит из области изменяемого размера, на которой размещаются те или иные игровые объекты, в список которых входят:
1. Бегающий противник (рис. 4). Объект контролируется программным кодом MoveableMonster.cs (рис. 5)., в котором реализован класс MoveableMonster и основные методы, отвечающие за передвижение и атаку.
Рисунок 4. Бегающий противник
Рисунок 5. Программный код MoveableMonster.cs
Программный код MoveableMonster (рис. 5) содержащий класс MoveableMonster также содержит методы:
OnTriggerEnter2D (рис. 6). Метод обрабатывает столкновение объекта со стеной, меняя направление движения, или с игроком, нанося урон и отыгрывая анимацию получения урона.
Рисунок 6. Метод OnTriggerEnter2D
2. Стреляющий противник (рис. 7). Объект контролируется программным кодом ShootableMonster.cs (рис.8), в котором реализован класс ShootableMonster и основные методы, отвечающие за атаку.
Рисунок 7. Стреляющий противник
Рисунок 8. Программный код ShootableMonster.cs
Программный код ShootableMonster (рис. 8) содержащий единственный класс ShootableMonster также содержит методы:
1) Awake (рис. 9). В методе Awake мы получаем ссылку на объект bullet (снаряд) для её дальнейшего использования.
Рисунок 9. Метод Awake
2) Shoot (рис. 10). Метод задаёт координаты для объекта bullet (снаряд) и направление полёта снаряда
Рисунок 10. Метод Shoot
3) OnTriggerEnter2D (рис. 11). Метод реализует получение урона персонажем, и уничтожение стреляющего противника падением на него.
Рисунок 11. Метод OnTriggerEnter2D
3. Стационарный противник (рис. 11). Объект контролируется программным кодом Monster.cs (рис. 12)., в котором реализован класс Monster и основные методы, отвечающие за анимацию и атаку.
Рисунок 11. Стационарный противник
Рисунок 12. Программный код Monster.cs
Программный код Monster (рис. 12) содержащий класс Monster также содержит метод OnTriggerEnter2D (рис. 13). Метод отвечает за получение объектом урона и уничтожение при выстреле в него.
Рисунок 13. Метод OnTriggerEnter2D
3.2 Описание объектов игры
Задний фон (рис. 14). Объект фон не имеет свойств и методов, создается исключительно для отображения глубины, красоты и чувства законченности готового проекта.
Рисунок 14. Задний фон проекта(Background)
4.
1. Статичное препятствие (рис.15). Объект контролируется программным кодом Obstacle.cs (рис.16), в котором реализован класс obstacle и метод отвечающий за нанесение урона. Статичное препятствие размещается на сцене до запуска игры и служит как препятствием для продвижения игрока, так и возможной платформой для прыжка. К объекту прикрепляется дополнительно созданный физический материал, влияющий на контакт с объектом.
Рисунок 15. Статичное препятствие
Рисунок 16. Программный код obstacle.cs
Программный код Obstacle (рис. 16) содержащий класс Obstacle также содержит метод OnTriggerEnter2D (рис. 17). Метод отвечает за нанесение урона персонажу при контакте с ним.
Рисунок 17. Метод OnTriggerEnter2D
2. Аптечка (рис. 18). Объект контролируется программным кодом Heart.cs. (рис. 19) в котором реализован класс Heart и метод увеличивающий жизни персонажа на единицу. Аптечка располагается на сцене до запуска игры и при контакте с ней восстанавливает герою определенное количество здоровья, после чего уничтожается.
Рисунок 18. Аптечка
Рисунок 19. Программный код Heart.cs
Программный код Heart (рис. 19) содержащий класс Heart также содержит метод OnTriggerEnter2D (рис. 20). метод увеличивающий количество жизней персонажа на единицу.
Рисунок 20. Метод OnTriggerEnter2D
3. Главный герой (рис. 21). Основной компонент игры. Передвигается по уровню, сталкивается с разными объектами. Герой контролируется игроком. Для отслеживания столкновений с другими игровыми объектами и возможности передвигаться по уровню, для объекта «Герой» был создан программный код Character.cs (рис. 22)
Рисунок 21. Главный герой
Рисунок 22. Программный код Character.cs
Программный код Character (рис. 22) содержащий единственный класс Character также содержит методы:
1) Awake (рис. 23). Метод Awake передает переменным livesBar, rigidbody, animator, sprite, bullet доступ к компонентам, отвечающим за анимацию, перемещение объекта, количество жизней, снарядов и отображение изображения.
Рисунок 23. Метод Awake
2) Update (рис. 24). В методе Update, записывается повторение действий для движения, выстрела и прыжка главного героя
Рисунок 24. Метод Update
3) FixedUpdate (рис. 25). Метод запускается каждый фрейм. В методе проверяется свойство «grounded» – находится ли объект на земле (платформе или препятствии).
Рисунок 25. Метод FixedUpdate
4) Run (рис. 26). В методе задаётся вектор перемещения для главного героя, а также происходит Flip (отражение) спрайта по оси х, если он двигается не в ту сторону, то его спрайт отражается, а также проверяется переход из статичного состояния, в состояние бега.
Рисунок 26. Метод Run
5) OnTriggerEnter2D (рис. 27). Метод OnTriggerEnter2D отслеживает столкновение объекта со снарядом, и нанесение урона.
Рисунок 27. Метод OnTriggerEnter2D
4. Здоровье. Для отслеживания количества оставшегося здоровья персонажа был создан программный код LivesBar.cs (рис.28)
Рисунок 28. Программный код LivesBar.cs
Программный код LivesBar (рис. 28) содержащий класс LivesBar также содержит методы:
1) Awake (рис. 29). Метод Awake проверяет и получает значение hearts (сердечки).
Рисунок 29. Метод Awake
2) Refresh (рис. 30). Метод изменяет количество жизней в поле LivesBar (область жизней) если они убывают или прибывают.
Рисунок 30. Метод Refresh
5. Камера. Для реалистичного и более плавного движения камеры за главным героем был создан программный код CameraController (рис.31).
Рисунок 31. Программный код CameraController.cs
Программный код CameraController (рис. 31) содержащий класс CameraController также содержит метод Update (рис. 32). Метод Update отвечает за плавное движение камеры вслед за целью на указанном расстоянии и с указанной скоростью.
Рисунок 32. Метод Update
6. Энергия (рис. 33) . Для перехода на следующий уровень был создан данный вид бонусов, который при контакте с главным героем перемещает его на следующий уровень. Объект контролируется программным кодом Finish.cs
Рисунок 33. Энергия
Рисунок 33. Программный код Finish.cs
ЗАКЛЮЧЕНИЕ
Выполнение дипломного проекта позволило более подробно изучить среду разработки Unity3D которая имеет большое количество стандартных модулей. При помощи этих модулей легко реализовать программу, управляемую по событиям с графическим интерфейсом пользователя и сопровождаемую звуками.
Созданная программа отличается простотой эксплуатации, надежностью и обладает интуитивно понятным интерфейсом пользователя. Игру можно усложнить в дальнейшем, заменив логику уровней на более сложную, например, увеличить продолжительность прохождения уровней за счёт более сложного размещения объектов на игровой платформе.
В ходе выполнения дипломного проекта была создана компьютерная игра «Adventure». Для реализации поставленной цели были решены следующие задачи:
· Разработка технического задания
· Разработка модели Uml
· Разработка диаграммы компонентов
· Разработка описания программного продукта
· Разработка руководства пользователя
· Разработка руководства программиста
· Оформление отчет по практике
Создание программы «Adventure» позволило пользователям получить занимательный, интересный, не требовательный к ресурсам компьютера и не требующий специальной установки, программный продукт.
СПИСОК ЛИТЕРАТУРЫ
1. Роллингз, Эндрю. “Проектирование и архитектура игр”: пер. с англ./ Э. Роллингз, Д. Моррис. - М.: Вильямс, 2006 – 1040с.
2. Николаева О. “Эпидемия XXI века: телевидение, интернет и компьютерные игры”. - Ростов н/Д: Феликс, 2008 – 254с.
3. Конгер Д., “Физика для разработчиков компьютерных игр” - Москва: “Бином” 2007 – 180с.
4. Vahe Karamian. “Introduction to Game Programming: Using C# and Unity 3D” – New York, 2012 – 375c.
5. Terry Norton. “Learning C# by Developing Games with Unity 3D Beginner's GuideSep” – Klivlend, 2009 – 240c.
6. Matt Smith and Chico Queiroz “Unity 5.x Cookbook” – New York, 2014 – 470c.
7. Matt Smith and Chico Queiroz “Unity 4.x Cookbook” – New York, 2013 – 470c.
8. Joe Hocking. “Unity in Action: Multiplatform Game Development in C# with Unity 5” – Boston, 2010 – 1000c.
9. Jeremy Gibson “Introduction to Game Design, Prototyping, and Development: From Concept to Playable Game with Unity and C#” – Boston, 2011 – 310c.
10. Jeff W. Murray. “C# Game Programming Cookbook for Unity 3D” – Boston, 2014 – 540c.
11. Alex Okita. “Learning C# Programming with Unity 3D”. – New York, 2015 - 450с.
12. Касихин В.В. “Как стать создателем компьютерных игр. Краткое руководство”. – “Вильямс” 2006 – 150с.
13. Jonathan Tweet. Dungeon Master's Guide. Dungeons & Dragons Core Rulebook II / Jonathan Tweet, Monte Cook, Skip Williams. - Wizards of the Coast, Belgium, 2003. - 320 с.
14. Жарков В. А., “Компьютерная графика, мультимедиа и игры на Visual C#”, - Москва “Жарков пресс”, 2005 – 100с.
15. Рейнбоу В., “Компьютерные игры”. Энциклопедия. – С.: “Питер” 2005. -732с.
16. Раскин Д. “Интерфейс: новые направления в проектировании компьютерных систем” – Москва: “Русская редакция”, 2000 – 130с.
17. Шилдт Г. “Полный справочник по С#”, - “Вильямс”, 2008. - 752 с
18. Eric Lengyel “Mathematics for 3D Game Programming and Computer Graphics” – New York, 2011 – 200с.
19. Lan Millington and John Funge “Artificial intelligence for games” – New York, 2009 – 180с.
20. Павловская Т.А. “Программирование на языке высокого уровня” – “Питер” , 2005 – 155с.
ПРИЛОЖЕНИЯ
Приложение А
Руководство пользователя
После запуска программы в главном окне программы размещается игровое поле, на котором расположены игровые объекты: Главный герой, препятствия, противники, ресурсы, платформы и фон. (рис. 34)
Рисунок 34. Игровая платформа, главные объекты.
Перемещение главного героя осуществляется путем нажатия клавиш WASD (рис. 35) или стрелок (рис. 36).
Рисунок 35. Клавиши WASD
Рисунок 36. Стрелки
Главная цель игры-добраться до конца уровня, избегая встреч с бегающими (рис. 37)., стреляющими (рис. 38) или стационарными противниками (рис. 39).
Рисунок 37.
Рисунок 38.
Рисунок 39.
Обходя статичные (рис. 40) препятствия
Рисунок 40. Статичное препятствие
Собирать сердечки, увеличивающие количество жизни (рис. 41).
Рисунок 41. Сердечки
Чтобы добраться до окончания уровня, и собрать Энергию (рис. 42).
Рисунок 42. Энергия
Приложение Б
Руководство программиста
Выполненная программа представляет собой игру «Adventure» разработанную с использованием инструментальных средств разработки «Unity».
Программа включает в себя файлы кода:
Character, moveablemonster, shootablemonster, livesbar, monster, cameracontroller и obstecle, отвечающих за работу и взаимодействие игровых объектов.
Программный код Character (рис. 22) содержащий единственный класс Character также содержит методы:
1) Awake (рис. 43). Метод Awake передает переменным livesBar, rigidbody, animator, sprite, bullet доступ к компонентам, отвечающим за анимацию, перемещение объекта, количество жизней, снарядов и отображение изображения.
Рисунок 43. Метод Awake
2) Update (рис. 44). В методе Update, записывается повторение действий для движения, выстрела и прыжка главного героя
Рисунок 44. Метод Update
3) FixedUpdate (рис. 45). Метод запускается каждый фрейм. В методе проверяется свойство «grounded» – находится ли объект на земле (платформе или препятствии).
Рисунок 45. Метод FixedUpdate
4) Run (рис. 46). В методе задаётся вектор перемещения для главного героя, а также происходит Flip (отражение) спрайта по оси х, если он двигается не в ту сторону, то его спрайт отражается, а также проверяется переход из статичного состояния, в состояние бега.
Рисунок 46. Метод Run
5) OnTriggerEnter2D (рис. 47). Метод OnTriggerEnter2D отслеживает столкновение объекта со снарядом, отнимая жизни.
Рисунок 47. Метод OnTriggerEnter2D
Программный код LivesBar (рис. 28) содержащий класс LivesBar также содержит методы:
1) Awake (рис. 48). Метод Awake проверяет и получает значение hearts (сердечки).
Рисунок 48. Метод Awake
2) Refresh (рис. 49). Метод изменяет количество жизней в поле LivesBar (область жизней) если они убывают или прибывают.
Рисунок 49. Метод Refresh
Программный код MoveableMonster (рис. 5) содержащий класс MoveableMonster также содержит методы:
1) OnTriggerEnter2D (рис. 50). Метод обрабатывает столкновение объекта со стеной, меняя направление движения, или с игроком, нанося урон и отыгрывая анимацию получения урона.
Рисунок 50. Метод OnTriggerEnter2D
Программный код ShootableMonster (рис. 8) содержащий единственный класс ShootableMonster также содержит метод
1) Awake (рис. 51). В методе Awake мы получаем ссылку на объект bullet (снаряд) для её дальнейшего использования.
Рисунок 51. Метод Awake
2) Shoot (рис. 52). Метод задаёт координаты для объекта bullet (снаряд) и направление полёта снаряда
Рисунок 52. Метод Shoot
3) OnTriggerEnter2D (рис. 53). Метод реализует получение урона персонажем, и уничтожение стреляющего противника падением на него.
Рисунок 53. Метод OnTriggerEnter2D
Программный код Monster (рис. 12) содержащий класс Monster также содержит метод OnTriggerEnter2D (рис. 54). Метод отвечает за получение объектом урона и уничтожение при выстреле в него.
Рисунок 54. Метод OnTriggerEnter2D
Программный код CameraController (рис. 31) содержащий класс CameraController также содержит метод Update (рис. 55). Метод Update отвечает за плавное движение камеры вслед за целью на указанном расстоянии и с указанной скоростью.
Рисунок 55. Метод Update
Созданы объекты: Block, Bullet, Character, Heart, Monster, MoveablyMonster, Obstacle, ShootableMonster, (рис. 28).
Рисунок 56. Отображение игровых объектов в Unity3D
Также созданы анимации для объектов Character, Plant, Worm, BlueDude (рис. 29).
Рисунок 57. Отображение анимаций в Unity3D
Игра была скомпилирована, создан файл формата exe, позволяющий запускать игру на любом компьютере с операционной системой Windows, IOS или Linux. Файл был назвал IndianasTraveling.exe. Повторная компиляция игры возможна из инструментальных средств Unity.