РАЗРАБОТКА ИГРОВОГО ПРИЛОЖЕНИЯ ЖАНРА ПЛАТФОРМЕР НА ДВИЖКЕ UNITY С ИСПОЛЬЗОВАНИЕМ ЯЗЫКА ПРОГРАММИРОВАНИЯ C#: «Legends of planet Z-zerra: Black and White world»

V Международный конкурс научно-исследовательских и творческих работ учащихся
Старт в науке

РАЗРАБОТКА ИГРОВОГО ПРИЛОЖЕНИЯ ЖАНРА ПЛАТФОРМЕР НА ДВИЖКЕ UNITY С ИСПОЛЬЗОВАНИЕМ ЯЗЫКА ПРОГРАММИРОВАНИЯ C#: «Legends of planet Z-zerra: Black and White world»

Зайнутдинов А.Д. 1
1МБОУ «Гимназия №6» Приволжского района г. Казани
Смирнова А.В. 1
1МБОУ «Гимназия №6» Приволжского района г. Казани
Автор работы награжден дипломом победителя I степени
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

ВВЕДЕНИЕ

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

Целью данной работы является разработка игры жанра платформер на движке Unity с использованием языка программирования С#.

Основные задачи исследования:

Выбор инструментального программного обеспечения;

Изучение работы с графикой;

Анализ возможностей использования редактора Unity;

Реализация программы.

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

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

Метод моделирования.

Платформеры, как игровой жанр, появились в начале 1980-х годов, когда игровые консоли не были достаточно мощными. Действие игры не выходило за пределы одного экрана. Персонаж лазал вверх и вниз по лестницам или прыгал с платформы на платформу, часто сражаясь с противниками и преодолевая препятствия. Вскоре процесс прохождения уровня перестал быть в основном вертикальным и стал горизонтальным с появлением длинных многоэкранных прокручивающихся игровых миров. Самым ярким представителем игры платформера того времени до сих пор считается видеоигра Super Mario Bros., выпущенная в 1985 году фирмой Nintendo [4].

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

Приспособленность игры к разным мобильным устройствам, и, соответственно к самым распространённым платформам (Android, iOS, MacOS, Windows и др.) является отличной перспективой для ее успешного продвижения, привлечения большого количества аудитории при реализации конечному пользователю.

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

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

ГЛАВА 1. ОПИСАНИЕ ИНСТРУМЕНТОВ РАЗРАБОТКИ ДЛЯ СОЗДАНИЯ МОБИЛЬНОГО ПРИЛОЖЕНИЯ В UNITY

Язык программирования С#

C# (произносится как "си шарп") — простой, современный объектно-ориентированный язык программирования, но поддерживает также и компонентно-ориентированное программирование. Разработка современных приложений все больше тяготеет к созданию программных компонентов в форме автономных и самоописательных пакетов, реализующих отдельные функциональные возможности. Важная особенность таких компонентов — это модель программирования на основе свойств, методов и событий. Каждый компонент имеет атрибуты, предоставляющие сведения о компоненте, а также встроенные элементы документации. C# предоставляет языковые конструкции, непосредственно поддерживающие такую концепцию работы. Благодаря этому C# отлично подходит для создания и применения программных компонентов [9][10].

Вот несколько функций языка C#, обеспечивающих надежность и устойчивость приложений:

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

Обработка исключений дает структурированный и расширяемый способ выявлять и обрабатывать ошибки;

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

В C# существует единая система типов. Все типы C#, наследуют от одного корневого типа object. Таким образом, все типы используют общий набор операций, и значения любого типа можно хранить, передавать и обрабатывать схожим образом [][2].

1.2 Платформа Unity

Unity — межплатформенная среда разработки компьютерных игр. Unity позволяет создавать приложения, работающие под более чем 20 различными операционными системами, включающими персональные компьютеры, игровые консоли, мобильные устройства, Интернет-приложения и другие [12].

Выпуск Unity состоялся в 2005 году и с того времени идёт постоянное развитие. Изначально Unity предназначался исключительно для компьютеров Mac, но потом постепенно выходили обновления, позволяющее работать под Windows и другие ОС.

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

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

Редактор Unity имеет простой Drag&Drop интерфейс, который легко настраивать, состоящий из различных окон, благодаря чему можно производить отладку игры прямо в редакторе. Движок поддерживает два скриптовых языка: C#, JavaScript (модификация).

Проект в Unity делится на сцены (уровни) — отдельные файлы, содержащие свои игровые миры со своим набором объектов, сценариев, и настроек. Сцены могут содержать в себе как, собственно, объекты (модели), так и пустые игровые объекты — объекты, которые не имеют модели («пустышки»). Объекты, в свою очередь содержат наборы компонентов, с которыми и взаимодействуют скрипты. К объектам можно применять коллизии (в Unity т. н. коллайдеры — collider). В редакторе имеется система наследования объектов - дочерние объекты будут повторять все изменения позиции, поворота и масштаба родительского объекта. Скрипты в редакторе прикрепляются к объектам в виде отдельных компонентов.

При компиляции проекта создается исполняемый(.exe) файл игры (для Windows), а в отдельной папке — данные игры (включая все игровые уровни и динамически подключаемые библиотеки) [5].

1.3 Среда разработки MonoDevelop

MonoDevelop IDE (интегрированная среда разработки) (http://monodevelop.com) - свободная мультиплатформенная среда разработки, предназначенная для создания приложений на языках C#, C, C++, Java, Visual Basic.NET, CIL, Nemerle, Boo. Встроен в дистрибутив Unity3D как средство написания скриптов [11].

Возможности:

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

Сворачивание кода, или фолдинг (англ. folding) — одна из функций текстового редактора, позволяющая скрывать определённый фрагмент редактируемого кода или текста, оставляя лишь одну строку.

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

Автодополнение кода — функция в программах, предусматривающих интерактивный ввод текста (редакторы, оболочки командной строки, браузеры и т. д.) по дополнению текста по введённой его части.

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

- узнавать текущие значения переменных;

- выяснять, по какому пути выполнялась программа.

Модульное тестирование - единичное тестирование, или модульное тестирование (англ. unit testing) — процесс в программировании, позволяющий проверить на корректность единицы исходного кода, наборы из одного или более программных модулей вместе с соответствующими управляющими данными, процедурами использования и обработки.

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

1.4 Редактор скелетной анимации Spriter

Скелетная анимация — способ анимирования двумерных и трёхмерных моделей в мультипликации и компьютерных играх.

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

Также благодаря такому методу сокращается и объём информации, необходимой для анимирования. Достаточно хранить информацию о движении костей, а движения вершин высчитываются уже исходя из них [6].

Spriter - программа для создания костной анимации, работает с растровой графикой. Использует «модульный» метод создания плавных анимаций. Этот способ имеет множество преимуществ [3]:

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

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

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

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

1.5 Графический редактор Adobe Illustrator CC 2017

Adobe Illustrator — векторный графический редактор, разработанный и распространяемый фирмой Adobe Systems [7]. Одно из передовых приложений для дизайна векторной графики, позволяющее создавать логотипы, значки, рисунки, типографику и иллюстрации для печатных изданий, веб-публикаций, видео и мобильных устройств.

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

Illustrator регулярно обновляется, и его функциональность становится шире [8].

ГЛАВА 2. ОПИСАНИЕ ИГРОВОГО ПРИЛОЖЕНИЯ

Актуальность проекта

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

2.2 Общая постановка проекта

Основной целью данного проекта является разработка игрового приложения на Unity с использованием языка программирования С# и такого инструментального программного обеспечения, как среда разработки MonoDevelop, редактор скелетной анимации Spriter, графический редактор Adobe Illustrator CC 2017.

2.3 Назначение программного продукта

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

2.4 Комплекс технических средств

Для работоспособности игрового приложения приведены минимальные системные требования:

Android 4.4 или выше;

Процессор 1.2 GHz или лучше;

Память 1 GB RAM или выше;

Свободное место 60 Мб.

Выполнение проекта

Запустить приложение. После запуска на экране появляется окно с предысторией, где раскрывается сюжетная линия игры, рассказывается о персонажах. В правом нижнем углу данного окна находится кнопка «далее». Ее можно нажать, если Вы хотите пропустить предысторию или после прочтения предыстории (Приложение1, ).

Далее мы попадаем в основное меню игры, которое содержит 3 кнопки (Приложение1, Рисунок 2):

Start – после ее нажатия мы выходим в меню с выбором уровней;

Звук on/off – включение/выключения звуков/музыки;

Предыстория - выход в окно с предысторией игры;

Меню выбора уровней содержит кнопки уровней (Приложение1, ):

1 – уровень1;

– уровень 2;

– уровень 3;

– уровень 4;

– уровень 5;

Quit – для выхода в главное меню.

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

На следующий уровень можно попасть двумя способами:

- не переходя в меню выбора уровней, непосредственно после прохождения предыдущего уровня, нажав на кнопку «следующий»;

- переходя в меню выбора уровней, нажав на кнопку следующего уровня.

Для того чтобы завершить любой уровень, необходимо его пройти от начала до конца. При этом необходимо преодолеть все препятствия, побороть всех монстров-злодеев, собрать бонусы «звезды» по желанию (Приложение1, Рисунок 4).

Управление героем осуществляется тремя кнопками, которые находятся внизу экрана:

Стрелка вправо – движение вправо;

Стрелка влево – движение влево;

Стрелка вверх – прыжок.

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

В правом верхнем углу отражаются жизни героя в виде сердечек (Приложение1, Рисунок 5).

У героя есть 4 жизни. Жизнь теряется, если герой не преодолел препятствие, или его «убил» монстр-злодей. При потере жизни герой возвращается в последнюю точку авто-сохранения и продолжает проходить уровень с этого места. Если герой потерял все 4 жизни, то на экране появляется окно с сообщением «Игра Окончена» и предложением вернуться в меню с выбором уровней или начать этот уровень сначала (Приложение1, Рисунок 6).

В каждом уровне присутствует несколько точек авто-сохранения, которые активируются после прохождения каждой из данных точек (Приложение1, Рисунок 7).

Цель прохождения 5 уровня заключается в том, чтобы победить главного злодея База. Для этого надо сразиться с роботами, которых он выпускает (Приложение1, Рисунок 8). По мере того, как уничтожается каждый робот, главный злодей начинает терять цвет и становится более прозрачным (Приложение1, Рисунок 9). Когда все роботы будут побеждены, Баз исчезнет. Главный герой зайдет в потайную комнату, нажмет на красную кнопку и разрушит машину, которая забрала все цвета у планеты Z-zerra (Приложение1, Рисунок 10). Мир снова станет цветным и все будут счастливы. Игра пройдена, главный герой прыгает от радости, идут титры (Приложение1, Рисунок 11)!

Заключение

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

В результате мною была создана игра для мобильного устройства, которая в данный момент работает на ОС Android.

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

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

В перспективе было бы интересно загрузить игру на GooglePlay и протестировать ее в реальных условиях.

Данная работа может быть интересна всем, кто хочет попробовать себя в качестве разработчика мобильных приложений, не обязательно только игр. Здесь очень важно понять, что главное, это желание, упорство и труд! И тогда у вас обязательно все получится!

Список использованной литературы

  1.  
  2. Джон Шарп. Microsoft Visual C#. Подробное руководство. – 8-е издание – СПб: Издательство «Питер», 2017. – 836 с.;
  3.  
  4. Краткий обзор языка C#: [Электронный ресурс] // Microsoft – 2016 // Режим доступа: https://docs.microsoft.com/ru-ru/dotnet/csharp/tour-of-csharp/ (Дата обращения: 17.03.2018);
  5.  
  6. Особенности Spriter: [Электронный ресурс] // Сайт BrashMonkey // Режим доступа: https://brashmonkey.com/spriter-features/ (Дата обращения: 17.03.2018);
  7.  
  8. Платформер // Википедия - свободная энциклопедия. - 2018 // Режим доступа: https://ru.wikipedia.org/wiki/Платформер (Дата обращения: 10.03.2018);
  9.  
  10. Руководство пользователя Unity (2017.3): [Электронный ресурс] // Unity. Documentation – 2017 // Режим доступа: https://docs.unity3d.com/Manual/index.html (Дата обращения: 22.12.2017);
  11.  
  12. Скелетная анимация: [Электронный ресурс] // Википедия - свободная энциклопедия, 2016 // Режим доступа: https://ru.wikipedia.org/wiki/Скелетная_анимация (Дата обращения: 25.03.2018);
  13.  
  14. Adobe Illustrator: [Электронный ресурс] // Википедия - свободная энциклопедия, 2016 // Режим доступа: https://ru.wikipedia.org/wiki/Adobe_Illustrator (Дата обращения: 25.03.2018);
  15.  
  16. Adobe Illustrator СС: [Электронный ресурс] // Официальная страница на русском языке. // Режим доступа: https://www.adobe.com/ru/products/illustrator.html (Дата обращения: 25.03.2018);
  17.  
  18. С#: [Электронный ресурс] // Прогопедия — свободная энциклопедия языков программирования. – 2018 // Режим доступа: http://progopedia.ru/language/csharp/
  19.  
  20. C Sharp: [Электронный ресурс] // Википедия - свободная энциклопедия. - 2018 // Режим доступа: https://ru.wikipedia.org/wiki/C_Sharp (Дата обращения: 17.03.2018);
  21.  
  22. MonoDevelop: [Электронный ресурс] // Википедия - свободная энциклопедия, 2016 // Режим доступа: https://ru.wikipedia.org/wiki/MonoDevelop (Дата обращения: 28.03.2018);
  23.  
  24. Unity (игровой движок): [Электронный ресурс] // Википедия - свободная энциклопедия. - 2018 // Режим доступа: https://ru.wikipedia.org/wiki/Unity_(игровой_движок) (Дата обращения: 28.03.2018);

Приложение 1. Снимки экрана игры. Коды программы.

Рисунок 1. Предыстория игры

//Данный код реализует первый запуск игры, при котором сразу открывается ее предыстория:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class bookStart : MonoBehaviour {

public GameObject book, start, bg, text;

void Awake () {

if (PlayerPrefs.GetInt ("book") != 3) {

book.SetActive (true);

start.SetActive (false);

text.SetActive (false);

bg.SetActive (false);

PlayerPrefs.SetInt ("book", 3);

}

}

}

Рисунок 2. Основноеменюигры

// Данный код реализует нажатие центральной кнопки «Start», при котором происходит переход в меню уровней:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;

public class LoadLevelBasic : MonoBehaviour {

public string sceneName;

void OnMouseDown () {

Time.timeScale = 1;

SceneManager.LoadScene (sceneName);

}

}

Рисунок 3. Меню выбора уровней

// Данный код реализует условие доступности следующего уровня только при успешном прохождении предыдущего уровня, отображает количество собранных «звезд» за пройденный уровень:

using System.Collections;using System.Collections.Generic;using UnityEngine;public class LevelUnlockMenu : MonoBehaviour {public GameObject star1, star2, star3 , unlock;public string Scene;void Start () {if (PlayerPrefs.GetInt (Scene) == star1.SetActive (false);

star2.SetActive (true);star3.SetActive (false);if (PlayerPrefs.GetInt (Scene) == 2) {star1.SetActive (true);star2.SetActive (false);star3.SetActive (true); }if (PlayerPrefs.GetInt (Scene) == 3) {star1.SetActive (true);star2.SetActive (true);star3.SetActive (true); }

if (PlayerPrefs.GetInt (Scene + "U") == {unlock.SetActive (false); }}}

Рисунок 4. Сражение с монстром-злодеем

// Данный код реализует движение монстра-злодея по заданной траектории:

using System.Collections;using System.Collections.Generic;using UnityEngine;public class MueCntrl : MonoBehaviour {public GameObject mue;private bool PTarget;public float ScaleX;void Update () {PTarget = mue.GetComponent ().PlayerTarget; }void OnTriggerEnter2D (Collider2D col) {if (!PTarget){if (col.gameObject.name == "P1") {mue.GetComponent ().P_1 = false;mue.GetComponent ().P_2 = true; }if (col.gameObject.name == "P2") {mue.GetComponent ().P_2 = false;mue.GetComponent ().P_1 = true; } } }}

Рисунок 5. Управление героем

// Данный код реализует управление героем с помощью кнопок «влево», «вправо» и «прыжок вверх»:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class CharContr : MonoBehaviour {

public Rigidbody2D rb2d;

public float playerSpeed;

public float jumpPower;

public int directionInput;

public bool groundCheck = false;

public bool facingRight = true;

private AudioSource aud;

void Awake () {

aud = GetComponent ();

}

void Start()

{

rb2d = GetComponent();

Time.timeScale = 1;

}

void Update()

{

if ((directionInput < 0) && (facingRight))

{

Flip();

}

if ((directionInput > 0) && (!facingRight))

{

Flip();

}

}

void FixedUpdate() {

transform.position = transform.position + new Vector3 (playerSpeed * directionInput, 0f, 0f);

}

public void Move(int InputAxis) {

directionInput = InputAxis;

}

public void Jump(bool isJump) {

isJump = groundCheck;

if (groundCheck)

{

rb2d.velocity = new Vector2(rb2d.velocity.x, jumpPower);

}

}

void Flip() {

facingRight = !facingRight;

Vector3 theScale = transform.localScale;

theScale.x *= -1;

transform.localScale = theScale;

}

void OnCollisionEnter2D () {

groundCheck = true;

}

void OnCollisionStay2D () {

groundCheck = true;

}

void OnCollisionExit2D () {

groundCheck = false;

}

}

Рисунок 6. Сообщение «Игра окончена», если игрок потерял все 4 жизни

//Данный код отображает индикатор жизней героя. В случае потери всех 4 жизней, на экране появляется сообщение «Игра Окончена»:

using System.Collections;using System.Collections.Generic;using UnityEngine;public class HP : MonoBehaviour {public int hp = 4;public GameObject hp1, hp2, hp3, hp4, GameOver;public GameObject [] gamePad;void Update () {if (hp == 3)hp4.SetActive (false);if (hp == 2)hp3.SetActive (false);if (hp == 1)hp2.SetActive (false);if (hp == 0) {hp1.SetActive (false);GameOver.SetActive (true);Time.timeScale = 0;for (int i = 0; i < gamePad.Length; i++)gamePad [i].gameObject.SetActive (false); } }}

Рисунок 7. Точка авто-сохранения

//Данный код отображает возможность продолжения игры с ближайшей точки авто сохранения (в случае потери героем жизни и при условии оставшихся у него ещё активных жизней):

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class charcterControl : MonoBehaviour {

private float Xpos,Ypos;

public bool fall, boss = false;

public GameObject [] fallp ;

public GameObject [] enemyMue ;

public GameObject cam ;

private AudioSource aud , audi;

public int stars = 0;

public GameObject Comp;

void Awake () {

Xpos = transform.position.x;

Ypos = transform.position.y;

aud = cam.GetComponent ();

audi = GetComponent ();

}

void OnCollisionEnter2D (Collision2D col) {

if (col.gameObject.name == "dieCol")

Die ();

}

void OnTriggerEnter2D (Collider2D col) {

if (col.gameObject.name == "dieCol")

Die ();

if (col.gameObject.name == "save") {

Xpos = transform.position.x;

Ypos = transform.position.y;

audi.Play ();

}

if (col.gameObject.name == "star"){

stars++;

audi.Play ();

col.gameObject.SetActive (false);

}

if (col.gameObject.name == "finish") {

Comp.SetActive (true);

audi.Play ();

}

}

void Die () {

aud.Play ();

if (!boss) {

transform.position = new Vector3 (Xpos, Ypos, transform.position.z);

}

GetComponent ().hp = GetComponent ().hp - 1;

cam.GetComponent ().Die = true;

for (int i = 0; i < fallp.Length ; i++)

fallp [i].gameObject.SetActive (true);

for (int i = 0; i < enemyMue.Length; i++) {

enemyMue [i].gameObject.GetComponent ().die = true;

enemyMue [i].gameObject.GetComponent ().R = true;

enemyMue [i].gameObject.SetActive (true);

}

}

Рисунок 8. Главный злодей Баз выпускает роботов

// Данный код реализует движение выпускаемых главным злодеем Базом роботов по заданной траектории:

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class androidCnrt : MonoBehaviour {

void Update () {

transform.Translate (new Vector3 (-0.3f, 0f, 0f));

}

void OnCollisionEnter2D (Collision2D col){

if (col.gameObject.name == "L")

Destroy (gameObject);

if (col.gameObject.name == "player") {

Destroy (gameObject);

}

}

}

Рисунок 9. Главный злодей Баз становится бесцветным

// Данный код реализует сцену главного сражения игры. По мере того, как главный герой Рон уничтожает роботов, главный злодей Баз теряет свой цвет и становится бесцветным. В итоге он полностью исчезает. Злодей побежден! Герою открывается проход в потайную комнату:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class BAZStart : MonoBehaviour {

public GameObject bazinc, bazinc2, android, cam, camUI, eventsys, player, baz, r, arrow;

private bool camcast,instandr;

public int i;

void OnTriggerEnter2D (Collider2D col){

if (col.gameObject.name == "player") {

bazinc.SetActive (false);

bazinc2.SetActive (true);

transform.Translate (new Vector3 (0f,50f,0f));

StartCoroutine (CAST ());

}

}

IEnumerator andrInst () {

while (baz.GetComponent ().material.color.a > 0) {

Instantiate (android ,new Vector3 (105,-40,-17),Quaternion.identity);

yield return new WaitForSeconds (Random.Range (1f,2f));

}

r.SetActive (false);

arrow.SetActive (true);

}

IEnumerator CAST () {

float Campos = cam.transform.position.x;

eventsys.SetActive (false);

camUI.SetActive (false);

player.GetComponent ().directionInput = 0;

cam.SetActive (true);

while (cam.transform.position.x < 133f) {

cam.transform.position = cam.transform.position + new Vector3 (0.5f, 0f, 0f);

yield return new WaitForSeconds (0.01f);

}

yield return new WaitForSeconds (1f);

while (cam.transform.position.x > Campos) {

cam.transform.position = cam.transform.position - new Vector3 (0.5f, 0f, 0f);

yield return new WaitForSeconds (0.01f);

}

cam.SetActive (false);

camUI.SetActive (true);

eventsys.SetActive (true);

StartCoroutine (andrInst ());

i++;

}

}

Рисунок 10. Потайная комната с красной кнопкой

// Данный код реализует сцену нажатия «Красной кнопки», что символизирует разрушение машины, которая «высасывала» все краски мира и делала его черно-белым:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;

public class buttonFINAL : MonoBehaviour {

void OnCollisionEnter2D (Collision2D col){

if (col.gameObject.name == "player")

SceneManager.LoadScene ("final");

}

}

Рисунок 11. Победа! Цветной мир! Игра пройдена. Титры.

// Данный код реализует движение финальных титров вверх:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class credits : MonoBehaviour {

void Update () {

transform.Translate (new Vector3 (0f, 0.01f, 0f));

}

}

// Данный код реализует прыжки вверх главного героя Рона от радости:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class playerJUMP : MonoBehaviour {

void Awake () {

StartCoroutine (Up ());

}

IEnumerator Up () {

for (int i = 0; i < 5; i++) {

transform.position = transform.position + new Vector3 (0f, 0.4f, 0f);

yield return new WaitForSeconds (0.02f);

}

StartCoroutine (down ());

}

IEnumerator down () {

for (int i = 0; i < 10; i++) {

transform.position = transform.position - new Vector3 (0f, 0.2f, 0f);

yield return new WaitForSeconds (0.02f);

}

StartCoroutine (Up ());

}

}

Просмотров работы: 847