Вы находитесь на странице: 1из 41

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

ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ


УЧРЕЖДЕНИЕ
СРЕДНЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ТУЙМАЗИНСКИЙ ГОСУДАРСТВЕННЫЙ ЮРИДИЧЕСКИЙ КОЛЛЕДЖ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

РАЗРАБОТКА КОМПЬЮТЕРНОЙ ИГРЫ “2D Платформер”

КУРСОВАЯ РАБОТА

САБИТОВ ДМИТРИЙ ОЛЕГОВИЧ


ПКС-407
09.02.03 ПРОГРАММИРОВАНИЕ В КОМПЬЮТЕРНЫХ СИСТЕМАХ
ВЫПОЛНИЛ СТУДЕНТ
ГРУППЫ ПКС-407
САБИТОВ Д.О.

РУКОВОДИТЕЛЬ:
КУЗНЕЦОВА В.Э.
ДАТА ЗАЩИТЫ:
______________________
ОЦЕНКА: _____________
ПОДПИСЬ___________

ТУЙМАЗЫ 2021

1
Содержание

Введение..........................................................................................................3
Глава 1. Теоретическая часть.....................................................................5
1.1. История игрового движка Unity...........................................................5
1.2. Особенности Unity в создании виртуальной рабочей среды..........11
1.3. Жанры игр............................................................................................16
Глава 2. Практическая часть....................................................................23
2.1. Среда Unity как инструмент разработки...........................................23
2.2. Функционал проекта...........................................................................25
2.2. Взаимодействие с игрой и её возможные доработки......................25
Заключение...................................................................................................37

Список источников и литературы...........................................................38


Приложение..................................................................................................38

2
Введение

С течением информационно-технического прогресса компьютеры все


глубже проникают в жизнь человека, становясь неотъемлемым инструментом
для выполнения большинства бытовых и рабочих задач, в том числе
проведения досуга. Развлечения сегодня — одна из функций компьютерной
техники. Среди мультимедийных развлечений можно выделить видеоигры,
как технологию, давно и успешно конкурирующую за аудиторию и
человеческое внимание с кинофильмами, книгами или музыкой Рынок
видеоигр — прибыльная и быстро растущая отрасль. По состоянию на 2020-й
год объем рынка видеоигр составляет 175 миллиардов долларов в год и
продолжает расти. Низкие требования к входу на рынок может представлять
интерес для разработчика. Кроме того, этот вид разработки может быть
крайне увлекательным возможностью создавать собственные миры, живущие
и развивающиеся по придуманным тобой правилам, которые, к тому же,
можно менять в любой момент как захочется, наблюдая изменения, которые
ты не предусматривал, но являющиеся следствием твоего вмешательства.
Проблемой данного исследования является создание компьютерной
игры.
Исходя из проблемы, определили тему дипломной работы: «Разработка
компьютерной игры на платформе «Unity».
На сегодняшний день создание компьютерных игр является
актуальным, поскольку они привлекают обширнейшую аудиторию, в
которую входят представители всех возрастов и слоев населения.
Наблюдается стремительное развитие игрового программного обеспечения,
постоянное усовершенствование методов реализации игрового процесса,
графических представлений, разработка новых методов взаимодействия
пользователя с приложением.
Объектом исследования является компьютерная игра на платформе
«Unity».
3
Предметом данной работы является процесс создания компьютерной
игры на платформе «Unity».
Цель: Разработка компьютерной игры в жанре гонки.
Из поставленной цели вытекают следующие задачи:
1. Отбор и ознакомление с литературой, необходимой для
ознакомления с темой курсовой работы.
2. Ознакомление с основными аспектами создания игры, их
особенностями и способами реализации.
3. Разработка собственного игрового приложения на основе
полученных знаний.
4. Разработка основной концепции игры.
5. Разработка графического и звукового оформления
6. Непосредственная реализация приложения.
Теоретическая значимость данной работы состоят в следующем:
1. Раскрытии понятия и сущности компьютерной игры;
2. Изучении состава компьютерный игры;
3. Обосновании достоинств и недостатков компьютерный
гиры.
Практическая значимость исследования состоят в разработке
компьютерной игры на платформе Unity в жанре гонки.

4
Глава 1. Теоретическая часть
1.1 История игрового движка Unity

Unity (рис. 1) первая версия которого была создана в июне 2005 года
тремя людьми: Дэвидом Хелгасоном, Джошимом Анте и Николасом
Френсисом. Их целью было создание доступного любительского движка с
удобным графическим интерфейсом, и первая версия движка имела схожий с
Final Cut пользовательский интерфейс, работающий по принципу drag-and-
drop (то есть перетягивание элементов между подменю программы).
Изначально Unity работал только под macOS, однако разработчики отлично
понимали, что доля яблочной ОС на рынке невелика, а уж создателей игр на
ней вообще мало. Поэтому первое глобальное добавление, появившееся в
августе 2005 в версии 1.1 — это возможность сборки игр под Windows и
поддержка плагинов C/C++. Однако на тот момент полноценным игровым
движком Unity назвать было трудно — он не поддерживал множество
графических эффектов и подходил разве что для создания качественных
анимаций. Разработчики исправили это недоразумение в версии 1.2 от
декабря 2005 года — добавили эффекты постобработки, рэгдолл, тени,
встроенный скрипт управления персонажем, расширили возможности
редактора скриптов. После этого движком стали интересоваться инди-
разработчики — поэтому выросло количество ошибок со старыми
видеокартами и системных проблем с драйверами, которые создатели движка
фиксили еще год. Последняя версия — 1.6.2 — вышла в мае 2007: да, до
CryEngine 2 того же года она не дотягивала, однако создавать простые игры
на Unity уже тогда было удобно, да и основные ошибки уже были
исправлены.

5
Рис. 1 Логотип Unity

Unity 3D 2 и Unity iPhone


В октябре 2007 команда разработчиков выпустила вторую версию
движка. Основные изменения — добавление полноценной среды разработки
под Windows (в версии 2.5, март 2008) , а так же улучшенный веб-плеер. Так
как macOS использует API OpenGL, а Windows — в основном DirectX,
разработчики добавили поддержку последнего в версию для Windows — по
их словам, это привело к 30% увеличению скорости работы. Так же была
добавлена поддержка веб-стриминга, мягких теней реального времени,
Terrain Engine (часть движка, которая отвечает за отрисовку земли), а так же
полностью переработали GUI (графический интерфейс пользователя). В
Unity 2.6 (октябрь 2009) Indie-версия движка стала бесплатной и появилась
версия для Wii.
Движок изначально был нацелен на macOS, и поэтому неудивительно,
что с выходом iPhone движок оптимизировали и для него. Он развивался
самостоятельно на протяжении 2 лет: с октября 2008 до апреля 2010, после
чего был объединен с Unity 3D 3. За два года вышло 8 версий — добавили
поддержку .NET 2.1, возможность работы с сетью и поддержку iPad. Движок
использовал API OpenGL ES до версии 2.0. Одной из лучших игр на Unity
iPhone можно считать шутер Shadowgun — он демонстрировал
6
действительно высокодетализированную картинку и множество красивых
эффектов:
Unity 3D 3
Третья версия вышла в сентябре 2010. Изменений много — теперь все
элементы редактора можно менять местами как удобно, улучшили карты
освещения, добавили: возможность отложенного рендеринга, Umbra
occlusion culling (отрисовка только тех объектов, которые видны на экране),
низкоуровневую отладку и FMOD аудио фильтры (возможность проигрывать
разные аудиоформаты на разных платформах без конвертации). В это же
время компания EA заинтересовалась движком и подписала с Unity
Technologies контракт о многолетнем сотрудничестве, а количество
зарегистрированных разработчиков превысило 200 000.
В декабре 2011 вышла первая версия Unity 3.5. Основные нововведения
— возможность работы с Adobe Flash и публикация игр в формате .swf. Так
же добавили новую систему частиц (которая теперь умеет взаимодействовать
с тенями и светом), поддержку HDR (расширенного динамического
диапазона), LOD (Levels Of Detail — возможность отрисовки далеких
объектов с худшей детализацией для экономии ресурсов), а так же
мультипоточный рендеринг (использование возможностей многоядерных
процессоров). Окно редактора Unity 3.5 с запущенной тестовой игрой-
демонстрацией способностей движка AngryBots:
Unity 3D 4
Новая версия вышла в ноябре 2012. Из основных изменений — движок
научился работать под Linux. Так же была добавлена поддержка API DirectX
11, улучшена система анимации (добавлен скиннинг на GPU) и освещения.
Следующий глобальный релиз, Unity 4.3, вышел через год, в ноябре
2013: введена поддержка 2D-спрайтов и интегрирован физический движок
Box2D — если раньше разработчикам приходилось делать «фальшивый» 2D,
размещая плоские текстуры на плоскости в пространстве, то теперь есть
возможность работать не с пространством, а только с плоскостью. Так же
7
создатели Unity сделали жизнь разработчикам мобильных игр проще —
теперь есть возможность собирать игры для iOS в версии движка для
Windows. Одной из самых красивых игр на Unity 4 является пошаговая
стратегия Endless Space:
Unity 3D 5
Самая новая версия движка, развивается с марта 2014 и по сей день.
Количество зарегистрированных разработчиков превышает 3 миллиона — в
основном потому, что Indie-версия движка бесплатна. Для тех, кому нужны
дополнительные возможности, есть версия Plus и Pro (35 и 120 долларов в
месяц), а так же есть возможность собрать редактор самому и договориться с
разработчиками о цене.
В Unity 5 добавили и добавляют достаточно много, это пожалуй,
крупнейшей релиз за все время существования Unity:
 Новые инструменты графического интерфейса отдельно для 3D и
2D игр.
 Полноценный звуковой редактор (можно в реальном времени
объединять различные звуки, добавлять эффекты, связывать их с
событиями в игре).
 Поддержка WebGL — игры работают напрямую в браузере без
установки веб-плеера.
 Глобальное освещение в реальном времени для консолей нового
поколения, ПК и мобильных платформ.
 Отражение света в реальном времени на основе Reflection Probes.
 Физически корректные материалы (к примеру кусок дерева теперь
плавает в воде сам, без дополнительных скриптов).
 Новые возможности 2D физики: точечные силы притягивания и
отталкивания; тангенциальные силы (силы, направленные по
касательной к поверхности объекта); силы, направленные вдоль
любых осей; одностороннее столкновение.

8
 Отслеживание загрузки процессора, видеокарты и памяти на
временной шкале в режиме реального времени.
 Добавление полноценного 64х-битного редактора.
 Интеграция Terrain Speedtree.
 Добавление новых API для 2D физики и редактора анимации в
Box2D, обновление 3D физики до nVidia PhysX3.
 Просмотр сцен в HDR-режиме.
 Настройки для рендера сцены с помощью заполняющего (Ambient)
света.
 Улучшена работа LOD (теперь нет падения производительности для
непропорционально скейлированной геометрии).
 Новые формы для препятствий Nav Mesh и сжатые текстуры для
Cubemaps.
 Поддержка джойстика для Windows Store.
 Внутриигровая реклама без сторонних плагинов (к сожалению —
трудновырезаемая, так как зашита в саму игру в виде текстур и
показывается даже без наличия интернета).
 Повторяющаяся анимация может передвигать персонажа.
В Unity 5.1 в июне 2015 в основном исправили ошибки и сделали
поддержку VR (виртуальной реальности) — на первых порах только Oculus
Rift. В сентябре того же года вышло минорное обновление 5.2 — добавлены
новые возможности для разработчиков приложений под Android, для работы
со звуком добавлена поддержка Spatialization API для модулей расширений
аудио. В версии 5.3 (декабрь 2015) изменений уже больше:
 Новые инструменты: обновленный MonoDevelop, одновременное
редактирование нескольких сцен, инструменты для 2D,
автоматическое тестирование.

9
 Оптимизация графики, включая новое ядро OpenGL,
экспериментальная поддержка Metal в OS X и обновленная система
частиц.
 Улучшенная поддержка WebGL и iOS 9.
 Поддержка интегрированных внутриигровых покупок.
 Добавлена экспериментальная поддержка DirectX 12.
В 5.4 (август 2016) улучшили графический рендер, повысивший
качество визуальной составной (например, теперь нет шумов в затененных
областях). Значительно доработана и улучшена поддержка VR-платформ.
Добавлены настраиваемые частицы, новые зеркальные эффекты, улучшен
импорт графики. Самым крупным нововведением в последней на данный
момент Unity 5.5 (ноябрь 2016) стала поддержка Microsoft HoloLens (очков
дополненной реальности от Microsoft).
Для разработчика игровых приложений движки представляют собой
программную среду, в которой он ведет разработку проекта. Ее
использование позволяет не заниматься такими рутинными вещами, как
описание работы с графикой, звуком и физической моделью. Но это не
значит, что программировать не придется ничего. Разработчику все равно
потребуется писать скрипты для внутриигровых действий. На Unity,
например, потребуется работа с C#, да и на Unreal Engine знание языков
программирования не помешает.
Необходимо отметить, что важной особенностью Unreal Engine
является технология Blueprints, позволяющая описывать игровую логику и
события с помощью графических схем, без использования языков
программирования. Это, конечно, приведет к тому, что созданная игра будет
занимать больше места и требовать более быстрой платформы, но зато
процесс разработки значительно упрощается.
Использование игровых движков позволяет избавиться от написания
кода для очень многих рутинных моментов, так как, кроме самих движков,
для них существует огромное количество библиотек и расширений. С их
10
помощью первые простейшие игры на Unity можно создать уже через
несколько часов изучения платформы. Специально для начинающих в Unity
существует масса проектов вроде Creator Kit и Microgame, предлагающих
большое количество исходных материалов для написания простых
приложений в 2D и 3D. На Unreal Engine также есть множество библиотек и
уроков, позволяющих быстро освоить программную среду и начать писать
простые игровые приложения.

1.2 Особенности Unity в создании виртуальной рабочей среды

Мало кто в наше время напрямую использует низкоуровневые API для


разработки в сравнительно быстрые сроки многопользовательского проекта.
В основном, производители берут на вооружение готовые игровые движки
(Game Engine), которые уже включают в себя движок рендеринга,
физический движок, звук, систему скриптов, анимацию, искусственный
интеллект, сетевой код, а также управление памятью и многопоточность. На
крайний случай, разработав и протестировав игровой движок один раз,
компания может сэкономить немалые средства и время, повторно используя
свой продукт как основу для многих игровых проектов.
Большинство игровых движков содержит в себе интегрированную
среду разработки, что позволят тестировать скрипты и все игровые действия
в буквальном смысле «на лету».
Для нашей виртуальной рабочей среды мы решили использовать Unity
– мульти платформенный инструмент для разработки трехмерных
приложений, работающих в частности под операционной системой Windows.
Unity3d – это мощный мультиплатформенный инструмент для
разработки и программирования интерактивных браузерных и настольных
приложений с двух- и трехмерной графикой, обрабатываемой в реальном
времени.
11
Проект Unity3d основан в 2005 году в Дании компанией Unity
Technologies, имеет штаб-квартиру в San Francisco и рабочие группы в
Копенгагене, Лондоне, Стокгольме, Вильнюсе, Сеуле, Токио.
Все версии проекта Unity3d содержат интегрированный редактор
проектов, поддерживают импорт графических и неграфических ресурсов
(моделей, в том числе анимированных, текстур, скриптов и т. д.), содержат
встроенные ландшафты, шейдерную систему, сочетающую простоту
использования, гибкость и производительность. Программирование графики
в Unity3d осуществляется средствами JavaScript, Boo (диалект Phyton) и C#
на основе .NET; реализована работа с сетью, используется физический
движок Ageia PhysX, смешивание 3D-графики реального времени с
потоковым аудио и видео. Сервер ресурсов Unity обеспечивает контроль
версий в Unity.
Unity3d поддерживает широкий диапазон платформ: Windows (XP
/Vista / W7), MacOs X, iPhone, iPod, iPad, Xperia PLAY, PS3, Flash 3D player.
В 2013г. проект Unity дошел до финальной стадии версия Unity 4.1, в
которой список поддерживаемых платформ расширился до iOS, Android, Wii,
XBox 360, PlayStation 3, Linux. Поддерживаемые браузеры: IE, FireFox,
Chrome, Opera, Safari.
Разработчиками выпускаются две версии программного продукта:
обычная версия и платная версия Unity3d Pro. Первая отличается
ограниченным функционалом, вторая позволяет осуществить все этапы
графического конвейера, включая рендер в текстуру, эффекты пост-процесса,
удаление из процесса рендеринга невидимых вершин и полигонов.
Инструментарий Unity3d построен на использовании для разработки
интерактивных приложений с двух- и трехмерной графикой, обрабатываемой
в реальном времени, концепции игрового движка (Game Engine).
Несмотря на специфичность названия, игровые движки широко
используются в других типах интерактивных приложений, использующих
3D-графику в реальном времени, таких, как демонстрационные рекламные
12
ролики, архитектурные визуализации, обучающие симуляторы и среды
моделирования.
Игровой движок (Game Engine) – это центральный программный
компонент интерактивных приложений с трехмерной графикой,
обрабатываемой в реальном времени, в том числе компьютерных и видеоигр.
Он обеспечивает основные технологии моделирования и 3D-визуализации,
упрощает процесс разработки проектов, обеспечивает возможность их
запуска на нескольких платформах, таких как игровые консоли и настольные
операционные системы, например, GNU/Linux, Mac OS X и Microsoft
Windows.
Игровой движок обеспечивает основную функциональность пакета
Unity3d. Он включает в себя многократно используемые программные
компоненты: графический движок («визуализатор»), физический движок,
звуковой движок, систему скриптов, анимацию, искусственный интеллект,
сетевой код, управление памятью и многопоточность.
В дополнение к многократно используемым программным
компонентам, игровые движки, как правило, предоставляют набор
визуальных инструментов для разработки проектов. Эти инструменты
обычно составляют интегрированную среду для упрощенной, быстрой
разработки интерактивных приложений на манер поточного производства,
предоставляя гибкую и многократно используемую программную платформу
со всей необходимой функциональностью для разработки приложения,
сокращая затраты, сложность и время разработки.
Часто игровые движки имеют компонентную архитектуру,
позволяющую заменять или расширять некоторые подсистемы движка более
специализированными (и часто более дорогими) компонентами, например,
для симуляции физической природы взаимодействия (Havok), звука (FMOD)
или рендеринга (SpeedTree). Однако некоторые игровые движки, такие как
RenderWare, проектируются как набор слабосвязанных компонентов,
которые могут выборочно комбинироваться для создания собственного
13
движка, вместо более традиционного подхода, который заключается в
расширении или настройке гибкого интегрируемого решения.
Рассмотрим основные компоненты любого игрового движка –
графический и физический движки.
Графический 3D-движок (англ. 3D-graphics engine; система рендеринга
или «визуализатор») – промежуточное программное обеспечение (ППО),
основной задачей которого является визуализация (рендеринг) двух- или
трехмерной компьютерной графики. Может существовать как отдельный
продукт или в составе игрового движка и использоваться для визуализации
отдельных изображений или компьютерного видео. Графические движки,
использующиеся в программах по работе с компьютерной графикой (таких,
как 3ds Max, Maya, Cinema 4D, Zbrush, Blender), обычно называются
«рендерерами», «отрисовщиками» или «визуализаторами». При этом
основное и важнейшее отличие «игровых» графических движков от
«неигровых» состоит в том, что первые должны обязательно работать в
режиме реального времени, тогда как вторые могут тратить по несколько
десятков часов на вывод одного изображения. Вторым существенным
отличием является то, что, начиная приблизительно с 1995-1997 года,
графические движки производят визуализацию с помощью графических
процессоров (GPU) видеокарт. Программные графические движки
используют только центральные процессоры (CPU).
Физический движок (англ. physics engine) – программный движок,
который производит компьютерное моделирование физических законов
реального мира в виртуальном пространстве 3D-сцены с той или иной
степенью аппроксимации. Чаще всего физические движки используются не
как отдельные самостоятельные программные продукты, а как составные
компоненты других программ. Выделяют игровые и научные физические
движки.
Первый тип используется в компьютерных играх как компонент
игрового движка. В этом случае он также должен работать в режиме
14
реального времени, то есть воспроизводить физические процессы в игре с
той же самой скоростью, в которой они происходят в реальном мире. Вместе
с тем от игрового физического движка не требуется точности вычислений.
Современные физические движки симулируют не все физические
законы реального мира, а лишь некоторые, причем с течением времени и
прогресса в области информационных технологий и вычислительной техники
список «поддерживаемых» законов увеличивается. Современные физические
движки, как правило, могут симулировать следующие физические явления и
состояния: динамику абсолютно твердого и деформируемого тела, динамику
жидкостей и газов, поведение тканей и веревок (тросы, канаты и т. д.).
На практике физический движок позволяет наполнить виртуальное 3D-
пространство статическими и динамическими объектами – телами (англ.
body), указать некие общие законы взаимодействия тел и среды в этом
пространстве, в той или иной мере приближенные к физическим, задавая при
этом характер и степень взаимодействий.
Собственно расчет взаимодействия тел движок и берет на себя. Когда
простого набора объектов, взаимодействующих по определенным законам в
виртуальном пространстве, недостаточно, в силу неполного приближения
физической модели к реальной, возможно добавлять к телам связи (англ.
joint, «соединение»). Связи представляют собой ограничения объектов
физики, каждое из которых может накладываться на одно или два тела.
Рассчитывая взаимодействие тел между собой и со средой, физический
движок приближает физическую модель получаемой системы к реальной,
передавая уточненные геометрические данные в графический движок.
Unity3d в качестве физического движка использует Nvidia's PhysX
engine.
Основной концепцией Unity3d является использование в сцене легко
управляемых объектов, которые, в свою очередь, состоят из множества
компонентов. Создание отдельных игровых объектов и последующее

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

1.3 Жанры игр

Action.
Сущность экшенов отражает их название – в переводе с английского
оно означает «действие», и здесь игрок находится в самом центре действия и
управляет им. Главным образом оно связано с физическими испытаниями,
которые нужно преодолеть. К этому жанру относились самые первые
видеоигры, например, Galaga и Donkey Kong.
Обычно в экшенах очень легко приступить к игре, поэтому они до сих
пор остаются самыми популярными видеоиграми.
А теперь рассмотрим поджанры этой категории.
Платформеры.
Платформеры получили свое название благодаря тому, что в процессе
игры ее главный персонаж взаимодействует с платформами – обычно бегает,
прыгает или падает. Разнообразных платформеров очень много, самым
известным из них, пожалуй, можно назвать серию Super Mario Bros., а
Donkey Kong был одним из самых первых.
Интересный факт: первым трехмерным консольным платформером
была Jumping Flash! на первой Sony PlayStation. До этого момента все
платформеры были плоскими, «с видом сбоку», а персонажи обычно бежали
слева направо.
Шутеры .
Шутеры позволяют игрокам использовать в своих действиях оружие,
обычно с целью уничтожить врагов или противоборствующих игроков.
Шутеры делятся по ракурсу обзора игрока. В шутерах от первого
лица (FPS – Frst-person shooter) вид из глаз главного персонажа. Типичными
16
примерами являются Call of Duty, Half-Life и Halo. В шутерах от третьего
лица типа Fortnite и Splatoon действие показано так, что игрок может видеть
главного персонажа, обычно чуть сверху и сзади.
Шутеры с видом сверху, например, Galaga, Space Invaders и Raiden V:
Director’s Cut, как и следует из названия, демонстрируют нам вид полностью
сверху. И если в шутерах от третьего лица обычно используется шкала
здоровья, которая растет или уменьшается в зависимости от уровня здоровья
или состояния персонажа, то в шутерах с видом сверху часто применяется
принцип с некоторым количеством «жизней», когда надпись Game Over
появляется после исчерпания их запаса.
Файтинги.
В файтингах, в частности, Mortal Kombat и Street Fighter II, все
действие сосредоточено на боях, которые чаще всего проходят в форме
единоборств. Обычно в файтингах большой набор играбельных персонажей,
каждый из которых специализируется на своих уникальных способностях
или боевом стиле. В большинстве традиционных файтингов игрок должен
сражаться, продвигаясь все выше и побеждая все более и более сильных
противников.
Интересный факт: Street Fighter II был одной из первых видеоигр, где
появился играбельный женский персонаж, Чунь Ли (самый первый
играбельный женский персонаж появился в игре для автоматов Taito 1985
года под названием Typhoon Gal.)
Выживание.
Такой поджанр экшенов, как survival-action, в последние несколько лет
завоевал значительную популярность. Одним из первых его представителей
была игра в жанре survival-horror Resident Evil, хоть она и была линейной,
тогда как действие более современных игр на выживание типа Fortnite
обычно происходит в открытом мире, а игроки получают возможности и
ресурсы для создания инструментов, оружия и укрытий с целью выжить
Survival-horror.
17
В играх жанра survival-horror, например, Resident Evil, для создания
мрачных и суровых сеттингов часто используется серьезная тематика. Во
многих подобных играх изображается насилие и кровь, поэтому они
предназначены только для взрослой аудитории. Обычно такие игры могут
похвастаться захватывающим геймплеем, усиленным ключевым элементом
механики: ограниченными ресурсами, например, боеприпасами или
оружием.
Интересный факт: Resident Evil – одна из наиболее успешных игровых
серий в истории, в рамках которой появилось множество продолжений,
фильмов, игрушек, книг и настольных игр. А согласно геймерскому изданию
Книги рекордов Гиннесса первой Resident Evil для PlayStation принадлежит
рекорд худшего диалога в истории видеоигр.
Интерактивное кино.
Технология лазерных дисков позволила создать интерактивные
фильмы. В них используются заранее отснятые сцены с живыми актерами
или мультипликацией, приключение обычно представляется с видом от
третьего лица, а игрок контролирует выбор в определенных узловых точках
сюжета, например, сдвигает стик вправо или нажимает кнопку, чтобы
увернуться от летящего на него камня.
Интересный факт: Dragon’s Lair считается первым
примером интерактивного кино и классикой видеоигр. За анимацию отвечал
бывший аниматор Disney Дон Блут, и для создания игры его студии
потребовалось семь месяцев.
3D в реальном времени.
Последнее слово в жанре приключений – 3D в реальном времени,
которые иногда отделяют от интерактивного кино. Здесь вместо заранее
отснятых сцен игроки взаимодействуют с трехмерным игровым миром в
реальном времени. В качестве примера подобных игр можно назвать
Shenmue и Heavy Rain.
Ролевые игры.
18
Ролевые игры, или RPG – пожалуй, второй по популярности жанр. В
нем часто встречаются средневековые или фэнтезийные сеттинги, что
главным образом связано с происхождением жанра, который ведет свою
историю от Dungeons & Dragons и других настольных игр. Но ролевые игры
фантастической тематики, например, Mass Effect, Fallout и большинство
частей Final Fantasy, также не обделены вниманием хардкорных ролевиков и
внесли в жанр свой уникальный вклад.
Кроме того, на жанр повлияли и культурные различия – в частности,
многие геймеры делят RPG на WRPG (западные) и JRPG (японские).
Наконец, одной из знаковых фишек жанра является выбор игрока, влияющий
на итог игры, то есть у многих RPG есть несколько альтернативных
концовок. А теперь давайте рассмотрим различные виды ролевых игр.
MMORPG.
MMORPG, или массовые многопользовательские сетевые ролевые
игры, появились как графические варианты текстовых
многопользовательских подземелий (MUD – multi-user dungeon), популярных
в конце 1970-х.
В MMORPG сотни игроков активно взаимодействуют друг с другом в
едином мире и обычно выполняют одни и те же либо похожие задачи.
Симуляторы.
У представителей жанра симуляторов есть одна общая черта – все они
созданы для симуляции реальных или вымышленных систем, ситуаций или
событий.
Симуляторы строительства и менеджмента.
Самой популярной игрой этого жанра по праву является SimCity. В ней
игрок должен строить и развивать город, а также управлять им, в частности,
планировать улицы, распределять пространства и взимать налоги с горожан.
В других играх охват может быть ограничен большими или меньшими
рамками, например, кафе, небоскребом, парком развлечений или целой
планетой.
19
Симуляция жизни.
The Sims – самый популярный симулятор жизни и одна из самых
продаваемых игр всех времен. Как и в SimCity (также созданной Уиллом
Райтом) игрок управляет отдельными аспектами искусственной жизни. Такие
симуляторы могут позволять игрокам управлять генетикой персонажа или
средой их жизни. В некоторых случаях можно контролировать даже реакцию
персонажа на определенные ситуации.
Игры с виртуальными питомцами типа Nintendogs и «Тамагочи» также
можно отнести к этой категории – в сущности, это симуляторы ухода
за животными. Таким образом, The Sims можно назвать социальным
симулятором, и каждая из этих игр в определенном аспекте является
симуляцией жизни.
Наконец, некоторые наиболее масштабные игры этой категории
предоставляют персонажам значительный контроль над персонажами и их
окружением и поэтому называются «симуляторами бога».
Стратегии.
Геймплей этого жанра уходит своими корнями в традиционные
настольные стратегические игры. Часто в этих играх вам доступен целый мир
и все его ресурсы, а чтобы справиться с испытаниями, игроку требуется
тщательно продумывать стратегию и тактику. Со временем значительная
часть этого жанра перешла от пошаговых систем к реальному времени,
следуя желаниям игроков.
Варгеймы.
Геймплей этого поджанра стратегий сосредоточен на тактических или
стратегических изысканиях с привязкой к карте, чаще всего без
экономической составляющей и добычи ресурсов. Игры могут быть
пошаговыми и в реальном времени, очень часто используются исторические
сеттинги (в подавляющем большинстве случаев – Вторая мировая война).
Среди наиболее ярких представителей можно назвать серии Panzer General,
Close Combat, Sudden Strike («Противостояние») и «Блицкриг».
20
Глобальные стратегии.
Гибрид варгейма и 4X, где для достижения целей обычно требуется
грамотно управлять армией и ресурсами нации или империи.
Спортивные игры.
Спортивные игры, как и следует из названия, симулируют различные
виды спорта, например, гольф, баскетбол, обычный и американский футбол.
Встречаются также олимпийские виды спорта типа лыжных гонок, и даже
«барный спорт» вроде бильярда или дартс. Обычно соперники управляются
компьютером, хотя можно соревноваться и с другими игроками. И раз уж мы
говорим о спорте, сами по себе видеоигры тоже можно считать спортом!
Гонки.
Одни из наиболее популярных игр этой категории – гоночные
симуляторы серий Forza, Grand Turismo и Need for Speed, сюда же мы
относим классику игровых автоматов типа Pole Position. Здесь игроки
участвуют в гоночных заездах против соперников или на время.
Командные виды спорта.
Симуляция различных командных спортивных игр – один из
старейших игровых жанров. Некоторые представители жанра, например,
Arch Rivals и NBA Jam, подходят к спорту с юмором, тогда как другие,
например, Madden NFL и FIFA, стараются воссоздать реализм и подарить
ощущение участия в настоящих состязаниях.
Интересный факт: Серия Madden NFL старше половины игроков,
которые сейчас играют в реальной лиге NFL. Игры серии посетили 33
различных платформы и консоли, в том числе Windows, iOS, Sega Genesis
и Sega Saturn, Nintendo SNES, N64, GameCube, Wii и Wii U, Turbo Duo, 3DO,
PlayStation c первой по четвертую и все поколения Xbox.
Головоломки.
Головоломки, или логические игры, обычно играются на одном экране
или игровом поле, а для прохождения требуется решать определенные
интеллектуальные задачи.
21
Логические игры.
В логических играх нужно решать логические головоломки или
проходить какие-то испытания для ума типа лабиринтов. Среди наиболее
ярких представителей – интеллектуальные игры типа Brain Age и
более казуальные головоломки, например, Tetris.
Интересный факт: Первая версия «Тетриса» была текстовой. Ее
создатель Алексей Пажитнов для создания блоков различного размера
использовал скобки, а игроки должны были изменять положение блоков,
падающих в стакан, чтобы заполнять и убирать ряды.
Викторины.
Как и в настоящих викторинах, в компьютерных играх этого жанра для
набора очков игрок должен ответить на вопрос в течение заданного времени
(или раньше другого игрока). Этот жанр отлично подходит для казуальной
игры, поэтому в последнее время его популярность неуклонно растет,
особенно на мобильных телефонах.

22
Глава 2. Практическая часть
2.1. Среда Unity как инструмент разработки

Unity - это мультиплатформенный инструмент для разработки двух- и


трёхмерных приложений и игр, работающий под операционными системами
Windows и OS X. Созданные с помощью Unity приложения работают под
операционными системами Windows, OS X, Android, Apple iOS, Linux, а
также на игровых приставках Wii, PlayStation 3 и Xbox 360. Есть
возможность создавать интернет-приложения с помощью специального
подключаемого модуля к браузеру Unity, а также с помощью
экспериментальной реализации в рамках модуля Adobe Flash Player. Позже
от поддержки Flash отказались. Приложения, созданные с помощью Unity,
поддерживают DirectX и OpenGL.
Unity характеризуется следующими возможностями:
 Сценарии на C#, JavaScript (модификация) и Boo;
 Игровой движок полностью увязан со средой разработки. Это
позволяет прямо в редакторе испытывать игру;
 Работа с ресурсами возможна через простой Drag&Drop.
 Интерфейс редактора настраиваемый;
 Осуществлена система наследования объектов;
 Поддержка импорта из очень большого количества форматов;
 Встроенная поддержка сети;
 Есть решение для совместной разработки - Asset Server;
 Также можно использовать подходящий пользователю способ
контроля версий. К примеру, Tortoise SVN или Source Gear;
К особенностям данной среды разработки можно отнести
 широкие возможности импорта
 полностью настраиваемый и доступный большинству людей
интерфейс

23
 кроссплатформенность
 гибкость и расширяемость
 гибкая ценовая политика
 доступно для VITV и epichnoetv
 поддержка физики ткани (PhysX Cloth)
 Assets Store, так называемый магазин компонентов
 наличие бесплатной версии с некоторыми ограничениями
 скиннинг на CPU
Основной концепцией Unity3d является использование в сцене легко
управляемых объектов, которые, в свою очередь, состоят из множества
компонентов. Создание отдельных игровых объектов и последующее
расширение их функциональности с помощью добавления различных
компонентов позволяет бесконечно совершенствовать и усложнять проект.
Влияние компонента на поведение или положение того или иного
объекта в сцене (свойства компонента) определяется с помощью переменных
компонента.
Ресурсы (Assets) проекта – это строительные/составные блоки всех
проектов Unity, в качестве которых могут быть использованы файлы
изображений (текстур), 3D-моделей, звуковые файлы, которые будут
использоваться при создании в качестве ресурсов. Поэтому в любой папке
проекта Unity всегда существует подкаталог с именем Assets, где хранятся
все файлы ресурсов.
Когда какой-либо ресурс (например, геометрическая 3D-модель)
используется в сцене игры, он становится в терминологии Unity игровым
объектом (Game Object). Все эти объекты изначально имеют хотя бы один
компонент, задающий его положение в сцене и возможные преобразования
(компонент Transform). Переменные компонента Transform определяет
положение (position), поворот (rotation) и масштаб (scale) объекта в его
локальной декартовой прямоугольной системе координат X, Y, Z. Наличие

24
переменных у каждого компонента обусловливает возможность обращения к
ним из соответствующей программы (скрипта).
Компоненты (components) в Unity3d имеют различное назначение: они
могут влиять на поведение, внешний вид и многие другие функции объектов,
к которым прикрепляются (attaching). Unity предоставляет множество
компонентов различного назначения.
Для обеспечения интерактивности различных 3D-приложений в
Unity3d используются скрипты, которые также рассматриваются средой как
компоненты. Помимо JavaScript, Unity3d также предоставляет возможность
использовать для написания скриптов языки C# и Boo (производный от языка
Python). Для написания скриптов можно воспользоваться встроенным
редактором Unity3d MonoDevelop.
В качестве языка для написания скриптов в Unity применяются C#,
JavaScript и Boo. Наиболее приоритетными языками для нас были C# и
JavaScript.
Оба языка используют в качестве синтаксической основы язык
программирования C. В частности, от него унаследованы без изменений:
 обозначения начала/конца блока кода фигурными скобками;
 обозначения, ассоциативность и приоритет большинства
встроенных операций (присвоение, арифметические, логические,
побитовые операции, операции инкремента/декремента);
 синтаксис описания и использования переменных и функций
(порядок «тип имя», использование модификаторов, обязательность
скобок для функций, описание формальных параметров);
 синтаксис всех основных конструкций: условного оператора,
циклов, оператора множественного выбора;
 отсутствие процедур (их заменяют функции типа void);
 наименования встроенных элементарных типов (кроме bool, в
JavaScript этот тип называется boolean);

25
 использование точки с запятой
Всё это приводит к тому, что программы на JavaScript и C# внешне на
первый взгляд выглядят чрезвычайно похоже на C-программы. В обоих
языках сделаны однотипные расширения и дополнения по отношению к C
(или C++), в частности, расширен алфавит и введён собственный синтаксис,
поддерживающий пакеты, импорт описаний, определение единиц
компиляции.
Оба языка позволяют определить класс внутри класса. Внутренние
классы JavaScipt имеют доступ к нестатическим членам родительского
класса; кроме того, внутри методов можно определять локальные классы,
имеющие доступ по чтению к локальным переменным, и безымянные
(анонимные) локальные классы, которые фактически позволяют создавать
экземпляры объектов и интерфейсов, перекрывающие методы своего класса,
непосредственно в месте их использования. На этом механизме в JS-
программах может строиться обработка событий (событие генерирует вызов
метода, в исходном классе-обработчике являющегося абстрактным; там, где
нужен конкретный обработчик события, программист создаёт экземпляр
локального анонимного класса - наследника базового класса-обработчика и
непосредственно использует его). Таким образом, исчезает необходимость в
специальном типе и синтаксической поддержке для событий, но сам код,
создающий обработчики, несколько более сложен для понимания.

2.2. Функционал проекта

Проект представляет собой компьютерную игру жанре гонки, основная


цель игры заключается в прохождениях поворотов боком машины для
получение очков.
Прежде всего, проект должен отвечать следующим требованиям:
1. Игра должна обладать интуитивным и простым управлением.
26
2. Основная механика игры заключается в возможности игрока
управлять машиной в заносе.
3. Не должно быть слишком усложнённое восприятие игры.
4. Игрок должен получать очки за счет удержание машины в боковом
положении во время движения.
5. Меню не должно быть перегружено, но в тоже самое время должно
быть информативным.
Данные требования к функциональной части являются основными,
должны быть выполнены в первую очередь.
Для любителей попробовать что новое в игре есть 3 различных
транспортных средства между которыми игрок может переключатся в любое
время прямо во время игрового процесса.
Возможности:
1. Проходить карту зарабатывая максимальное количество очков.
2. Увеличивать свои очки за счёт подбора идеальной скорости и угла.
3. Переключаться между машинами.

2.3. Разработка компьютерной игры «2D Платформер»

Запускаем UnityHub. Cоздаем новый проект. Для начала мы должны


выбрать тим игрового проекта (2D, 3D и т.д.), затем задать имя и выбрать
местоположение на локальном устройстве (рис. 2).

Рис. 2 Создание проекта


27
Для начала создадим меню игры. В нем опишем основное управление и
добавим 2 кнопки(рис. 3).

Рис. 3 Создание меню игры

Создаем скрипт для кнопок меню и вешаем событие на кнопки(рис. 4).

Рис. 4 Создание скрипта для кнопок меню

Создаем новую сцену для игры и размещаем на ней необходимые


28
объекты(рис.5, рис.6, рис.7, рис.8).

Рис. 5 Размещение объектов на игровой сцене

Рис. 6 Размещение персонажа

29
Рис. 7 Размещение 2 персонажа

Рис.8 Размещение 3 персонажа

Отрегулирем размеры объектов отностильно друг друга(рис.9).


30
Рис.9 Регулировка размеров объектов

Создаем скрипты для управление персонажем, камерой и тд(рис.10).

Рис.10 PlayerControl.cs

31
Рис.11 PlayerCamera.cs

Рис.12 PlayerDamage.cs

32
Заключение

В процессе выполнения работы были поняты базовые принципы


работы приложений, созданных с использованием инструментария Unity и
изучены некоторые разделы предоставляемых платформой библиотек. Цели,
поставленные в начале работ, выполнены в полной мере.
Во время анализа доступных источников было проведено исследование
понятия компьютерная игра, во время которого была проведена
классификация компьютерных игр по 4 критериям, но из-за сравнительной
молодости игровой индустрии, а так же того, что классификация
компьютерных игр не была систематизирована, составить подробную
классификацию не удалось. Дополнительно был составлен алгоритм
разработки видеоигр.
Были проанализированы популярные средства разработки. В ходе
анализа, было проведено их сравнение и выбраны наиболее актуальные
средства разработки для начинающих разработчиков. Выбор приоритетных
средств разработки проходил по двум критериям: доступность и
функциональность.
После выбора средств разработки было начато изучение Unity, а так же
разработка самого проекта. В ходе разработки был изучен игровой движок
Unity и были приобретены необходимые знания и умения, а именно:
 создание сцен;
 создание анимаций;
 создание и написание скиптов;
 настройка объектов;
 создание UI;
 компиляция проекта.
Освоение среды разработки Unity несет не маловажный характер, так
как в современном мире индустрия разработки игр все сильнее

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

34
Список источников и литературы

1) Степчева З.В. Основы геометрического моделирования в Unity 3D.


2) Хокинг Джозеф Unity в действии. Мультиплатформенная
разработка на C#, 2019 – 352 с.
3) Goldstone, W. Unity Game Development Essentials. - Packt Publishing,
2019. -Чиртик, А.В. Популярный самоучитель HTML / А.В. Чиртик. - СПб.:
Питер, 2015.
4) Creighton, R.-H.Unity 3D Game Development by Example Beginner's
Guide. - Packt Publishing, 2018. - 384 c.
5) C# Programming Guide. [Электронный ресурс] URL:
https://msdn.microsoft.com/en-us/library/67ef8sbd.aspx (дата обращения:
09.02.2020).
6) Официальный сайт Visual Studio. [Электронный ресурс] URL:
https://www.visualstudio.com/ru/vs/ (дата обращения: 09.02.2020).
7) Официальный сайт игры Pacman. [Электронный ресурс] URL:
http://pacman.com/en/ (дата обращения: 09.02.2020).
8) Герасимов В. Unity 3.x Scripting. - Packt Publishing, 2020 – 267 с.
9) CorelDRAW [Электронный ресурс]. — Режим па:
http://www.coreldraw.com/ru/https://unity3d.com/ru (дата обращения:
09.02.2020).
10) Create Level in Tiled, Import to Unity using Tiled2Unity, YouTube
[Электронный ресурс]: видеоролик. — Режим доступа:
https://www.youtube.com/watch?v=PRZFArVoZj0 (дата обращения:
09.02.2020).
11) Компьютерные игры как искусство [Электронный ресурс]. —
Режим доступа: http://gamesisart.ru (дата обращения: 09.02.2020).
12) Game Maker: Studio [Электронный ресурс]. — Режим па:
https://www.yoyogames.com/gamemakerhttps://unity3d.com/ru (Дата обращения:
09.02.2020).
35
13) Mark of the Ninja [Электронный ресурс]. — Режим па:
https://www.kleientertainment.com/games/mark-ninjahttps://unity3d.com/ru (Дата
обращения: 09.02.2020).
14) Unity Game Engine [Электронный ресурс]. — Режим па:
https://unity3d.com/ru (Дата обращения: 09.02.2020).
15) Unity Manual, Unity Documentation [Электронный ресурс]:
справочник. - Режим доступа: https://docs.unity3d.com/Manual/ (дата
обращения: 09.02.2020).
16) Varcure, Unity Game Development for students. - Publishing, 2020.-
345 с.
17) Хорхе Паласиос Unity 5.х. Программирование искусственного
интеллекта в играх, 2020 – 272 с.
18) Джон Мэннинг, Пэрис Батфилд-Эддисон Unity для разработчика.
Мобильные мультиплатформенные игры , 2020 – 304 с.
19) Nicolas Alejandro Borromeo Hands-On Unity 2020 Game
Development, 2020 – 581 с.
20) Sue Blackman. Beginning 3D Game Development with Unity: All-in-
one, Multi-platform Game Development. - Apress, 2018. - 992 с.

36
Приложение
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Platformer.Gameplay;
using static Platformer.Core.Simulation;
using Platformer.Model;
using Platformer.Core;

namespace Platformer.Mechanics
{
/// <summary>
/// This is the main class used to implement control of the player.
/// It is a superset of the AnimationController class, but is inlined to allow for
any kind of customisation.
/// </summary>
public class PlayerController : KinematicObject
{
public AudioClip jumpAudio;
public AudioClip respawnAudio;
public AudioClip ouchAudio;

/// <summary>
/// Max horizontal speed of the player.
/// </summary>
public float maxSpeed = 7;
/// <summary>
/// Initial jump velocity at the start of a jump.
/// </summary>
public float jumpTakeOffSpeed = 7;

public JumpState jumpState = JumpState.Grounded;


private bool stopJump;
/*internal new*/ public Collider2D collider2d;
/*internal new*/ public AudioSource audioSource;
public Health health;
public bool controlEnabled = true;

bool jump;
Vector2 move;
SpriteRenderer spriteRenderer;
internal Animator animator;
readonly PlatformerModel model = Simulation.GetModel<PlatformerModel>();

public Bounds Bounds => collider2d.bounds;

void Awake()
{
health = GetComponent<Health>();
audioSource = GetComponent<AudioSource>();
collider2d = GetComponent<Collider2D>();
spriteRenderer = GetComponent<SpriteRenderer>();
animator = GetComponent<Animator>();
}

protected override void Update()


{
if (controlEnabled)
{
move.x = Input.GetAxis("Horizontal");
if (jumpState == JumpState.Grounded && Input.GetButtonDown("Jump"))
jumpState = JumpState.PrepareToJump;
else if (Input.GetButtonUp("Jump"))

37
{
stopJump = true;
Schedule<PlayerStopJump>().player = this;
}
}
else
{
move.x = 0;
}
UpdateJumpState();
base.Update();
}

void UpdateJumpState()
{
jump = false;
switch (jumpState)
{
case JumpState.PrepareToJump:
jumpState = JumpState.Jumping;
jump = true;
stopJump = false;
break;
case JumpState.Jumping:
if (!IsGrounded)
{
Schedule<PlayerJumped>().player = this;
jumpState = JumpState.InFlight;
}
break;
case JumpState.InFlight:
if (IsGrounded)
{
Schedule<PlayerLanded>().player = this;
jumpState = JumpState.Landed;
}
break;
case JumpState.Landed:
jumpState = JumpState.Grounded;
break;
}
}

protected override void ComputeVelocity()


{
if (jump && IsGrounded)
{
velocity.y = jumpTakeOffSpeed * model.jumpModifier;
jump = false;
}
else if (stopJump)
{
stopJump = false;
if (velocity.y > 0)
{
velocity.y = velocity.y * model.jumpDeceleration;
}
}

if (move.x > 0.01f)


spriteRenderer.flipX = false;
else if (move.x < -0.01f)
spriteRenderer.flipX = true;

38
animator.SetBool("grounded", IsGrounded);
animator.SetFloat("velocityX", Mathf.Abs(velocity.x) / maxSpeed);

targetVelocity = move * maxSpeed;


}

public enum JumpState


{
Grounded,
PrepareToJump,
Jumping,
InFlight,
Landed
}
}
}
using UnityEngine;

namespace Platformer.Mechanics
{
/// <summary>
/// This class animates all token instances in a scene.
/// This allows a single update call to animate hundreds of sprite
/// animations.
/// If the tokens property is empty, it will automatically find and load
/// all token instances in the scene at runtime.
/// </summary>
public class TokenController : MonoBehaviour
{
[Tooltip("Frames per second at which tokens are animated.")]
public float frameRate = 12;
[Tooltip("Instances of tokens which are animated. If empty, token instances are
found and loaded at runtime.")]
public TokenInstance[] tokens;

float nextFrameTime = 0;

[ContextMenu("Find All Tokens")]


void FindAllTokensInScene()
{
tokens = UnityEngine.Object.FindObjectsOfType<TokenInstance>();
}

void Awake()
{
//if tokens are empty, find all instances.
//if tokens are not empty, they've been added at editor time.
if (tokens.Length == 0)
FindAllTokensInScene();
//Register all tokens so they can work with this controller.
for (var i = 0; i < tokens.Length; i++)
{
tokens[i].tokenIndex = i;
tokens[i].controller = this;
}
}

void Update()
{
//if it's time for the next frame...
if (Time.time - nextFrameTime > (1f / frameRate))
{
//update all tokens with the next animation frame.
for (var i = 0; i < tokens.Length; i++)
39
{
var token = tokens[i];
//if token is null, it has been disabled and is no longer animated.
if (token != null)
{
token._renderer.sprite = token.sprites[token.frame];
if (token.collected && token.frame == token.sprites.Length - 1)
{
token.gameObject.SetActive(false);
tokens[i] = null;
}
else
{
token.frame = (token.frame + 1) % token.sprites.Length;
}
}
}
//calculate the time of the next frame.
nextFrameTime += 1f / frameRate;
}
}

}
}
using System.Collections;
using System.Collections.Generic;
using Platformer.Core;
using Platformer.Model;
using UnityEngine;

namespace Platformer.Mechanics
{
/// <summary>
/// AnimationController integrates physics and animation. It is generally used for
simple enemy animation.
/// </summary>
[RequireComponent(typeof(SpriteRenderer), typeof(Animator))]
public class AnimationController : KinematicObject
{
/// <summary>
/// Max horizontal speed.
/// </summary>
public float maxSpeed = 7;
/// <summary>
/// Max jump velocity
/// </summary>
public float jumpTakeOffSpeed = 7;

/// <summary>
/// Used to indicated desired direction of travel.
/// </summary>
public Vector2 move;

/// <summary>
/// Set to true to initiate a jump.
/// </summary>
public bool jump;

/// <summary>
/// Set to true to set the current jump velocity to zero.
/// </summary>
public bool stopJump;

SpriteRenderer spriteRenderer;
40
Animator animator;
PlatformerModel model = Simulation.GetModel<PlatformerModel>();

protected virtual void Awake()


{
spriteRenderer = GetComponent<SpriteRenderer>();
animator = GetComponent<Animator>();
}

protected override void ComputeVelocity()


{
if (jump && IsGrounded)
{
velocity.y = jumpTakeOffSpeed * model.jumpModifier;
jump = false;
}
else if (stopJump)
{
stopJump = false;
if (velocity.y > 0)
{
velocity.y = velocity.y * model.jumpDeceleration;
}
}

if (move.x > 0.01f)


spriteRenderer.flipX = false;
else if (move.x < -0.01f)
spriteRenderer.flipX = true;

animator.SetBool("grounded", IsGrounded);
animator.SetFloat("velocityX", Mathf.Abs(velocity.x) / maxSpeed);

targetVelocity = move * maxSpeed;


}
}
}

41

Вам также может понравиться