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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

РОСТОВСКИЙ ГОСУДАРСТВЕННЫЙ ЭКОНОМИЧЕСКИЙ


УНИВЕРСИТЕТ (РИНХ)

Факультет Компьютерных технологий и информационной


безопасности

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

КУРСОВОЙ ПРОЕКТ

По дисциплине “Программирование портативных устройств”


на тему: “Разработка мобильной игры с использованием Unity”

Выполнил студент Гончар Т.С.


(подпись, дата)

Группа ПРИ-331
Направление 09.03.04 «Программная инженерия»

Руководитель проекта В.А.Плетняков


д.э.н., ст. пр. (подпись, дата)

Проект защищен ____________


Оценка___________________
(дата)

Ростов-на-Дону
2021 г.
РЕФЕРАТ

Курсовой проект содержит 28 с., 10 рис., 23 источника.


Используемый инструментарий: язык C#, Unity, Visual Studi.
Основные результаты:
- Разработанное приложение на мобильные устройства.
-

КП-2020 - кафедра №35 ИТиЗИ – группа 331-ПРИ –Гончар Т.С. – 09.03.04 с.


СОДЕРЖАНИЕ

ВВЕДЕНИЕ....................................................................................................................................4

1. ИССЛЕДОВАНИЕ ДОСТУПНЫХ ПРОГРАММНЫХ ПЛАТФОРМ И


ИНСТРУМЕНТОВ РЕАЛИЗАЦИИ ПРОЕКТА.........................................................................5

1.1 Сравнительный анализ методов разработки мобильных приложений.........................5

1.2 Выбор инструментария разработки..................................................................................9

2 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ.....................................................................................11

2.1 Программная реализация персонажа..............................................................................11

2.2 Программная реализация врагов.....................................................................................17

2.3 Тестирование.....................................................................................................................22

2.4 Анализ механик игры..........................................................................................................26

ЗАКЛЮЧЕНИЕ............................................................................................................................27

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ..................................................................28

КП-2020 - кафедра №35 ИТиЗИ – группа 331-ПРИ –Гончар Т.С. – 09.03.04 с.


ВВЕДЕНИЕ

Целью курсового проекта является, исследование работы Unity. Проектирование и


разработка мобильной игры. Помимо прочего это применение навыков в работе с
мультимедиа файлами, звуковыми компонентами и библиотеками, а также написание
структурированного программного кода.
Создание прикладного приложения стало закреплением навыков в области
программирования и изучения фреймворка Unity.
Поставленные задачи:
1. Изучить рабочую область и функциональные возможности платформы Unity;
2. Подобрать теоретический материал по созданию мобильной игры;
3. Получить консультации более опытных программистов через форумы и блоги;
4. Разработать внутренний и внешний интерфейс мобильной игры;
5. Написать программный код;
6. Упорядочить и объединить компоненты интерфейса с программным кодом;
7. Провести тестирование и отладку готового приложения.
8. Проанализировать реализацию механик игры.

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 4


1. ИССЛЕДОВАНИЕ ДОСТУПНЫХ ПРОГРАММНЫХ ПЛАТФОРМ И
ИНСТРУМЕНТОВ РЕАЛИЗАЦИИ ПРОЕКТА
1.1 Сравнительный анализ методов разработки мобильных приложений
Рынок мобильных устройств непрерывно растёт и развивается. Приблизительное
число разработчиков мобильных приложений на сегодняшний день составляет 2,3 млн чел.
Это означает, что каждый восьмой из всех разработчиков в мире создает мобильные
приложения. В 2013 г. компания «Apple» вовремя World Wide Developer Conference
объявила, что в AppStore опубликовано уже 1,25 млн приложений, которые пользователи
скачали 50 млрд раз, а разработчики получили доход в 5 млрд долл. США. Растет
потребность в разработке качественного и соответствующего современным тенденциям
продукта. Рассматривая вопросы создания и реализации мобильных приложений, следует
начать с выбора технологий и методов разработки.
Оценивая технологии разработки мобильных приложений, следует отметить, что
данное направление требует выбора критериев оценки. К основным относятся следующие
критерии:
1. время разработки;
2. наличие специалистов;
3. удобство разработки и отладки;
4. документация и техническая поддержка;
5. скорость работы; юзабилити;
6. охват платформ.
Данные пункты можно объединить, оставив самые важные, а именно: выбор
платформы и функциональность для определения наиболее важных критериев разработки,
для конкретного приложения, а также его коммерческого успеха.

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 5


Сфера использования мобильных приложений разделена на части, в первую очередь,
операционными системами, используемыми в мобильных устройствах. Ниже приведена
статистика использования различных мобильных операционных систем в мировом масштабе
на конец 2015 г.:
Android – 82,8%;
iOS – 13,9%;
WindowsPhone – 2,6%;
BlackBerry OS – 0,3%;
others – 0,4%.
Критерием выбора операционной системы для разработки также является
коммерческий успех приложений. Несколько лет назад статистика монетизации приложений
говорила о том, что разработчики для iOS получают дивиденды более чем в 4 раза большие,
чем разработчики для Android. На данный момент ситуация для Android-разработчиков
стабилизируется и уровень доходов от создания приложений для Android выходит на один
уровень с конкурентами от Apple, что, в свою очередь, делает приоритетными Android-
разработчиков. Таким образом, очевидно, что при создании приложения стоит отдать
предпочтение разработке приложений для операционной системы Android.
Однако это лишь финансовая и статистическая стороны вопроса. Их стоит
рассматривать в совокупности с тем, какой функционал следует получить после реализации
проекта, что также является критерием при анализе технологий разработки мобильных
приложений.
Нижеследующий текст лишний, но при этом общего количества текста не хватает.
Вместо него в первой главе должно быть что-то, имеющее отношение к разработке игр.
Можно просто подробней рассмотреть движки или расписать, почему писать свой движок
хорошо/плохо.
В зависимости от выполняемых функций следует определить, какого типа будет
приложение. На данный момент существует три вида приложений для мобильных устройств:
1. нативное приложение;
2. гибридное приложение;
3. web-приложение.
Рассмотрим подробнее. Нативными для пользователя являются приложения,
которые требуют установки. В целом это верно, как и то, что такие приложения
разрабатываются специально под мобильные платформы iOS, Android, WindowsPhone.
Поэтому от разработчика требуются навыки программирования в конкретной среде
разработки, например, это могут быть xCod, eclipse, iPhone SDK, Android SDK. Реализуя

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 6


проект, можно обойти некоторые вопросы предпочтения пользователей той или иной
платформы, разрабатывая продукт в кроссплатформенных средах, таких как Appcelerator
Titanium, Kony Platform, Adobe Phone Gap. Написание кода ведется на простых для
понимания языках – HTML, JavaScript, CSS. В настоящее время функциональность
мобильных приложений, разработанных на платформах Appcelerator Titanium, Kony Platform,
Adobe Phone Gap, практически не уступает приложениям, которые написаны на объектно
ориентированных языках программирования высокого уровня, таких как C++ и Java, а их
использование на разных операционных системах и относительная простота разработки дает
большой плюс этим приложениям.
Готовое приложение приобретает приятный внешний вид и беспроблемное
взаимодействие приложения с мобильной операционной системой. Нативное приложение
также намного опережает гибридные приложения и web-приложения в вопросах
безопасности. Такие приложения с наименьшим поглощением ресурсов используют камеру,
микрофон, акселерометр, плеер и прочие функции. Условно нативные приложения можно
поделить на две группы: приложения, которым необходимо интернет-соединение, и офлайн-
приложения. Web-приложения, в свою очередь, имеют свои отличия от нативного
приложения. Пользоваться обычным сайтом на смартфоне неудобно, так как иногда верстка
сайта приобретает неприемлемый вид, и работать с ним невозможно.
Web-приложения создаются для того, чтобы пользоваться сайтом с телефона. По
своей сути, это тот же сайт, оптимизированный под мобильные устройства. Загружая web-
приложение через браузер телефона или планшета, происходит перенаправление
пользователя на специальный поддомен (m.example.com, mobile.example.com и т. д.). В
отличие от нативного приложения, web-приложения устанавливать не нужно – они работают
в браузере телефона. Поэтому от модели телефона и его мобильной платформы ровным
счетом ничего не зависит. Также вне зависимости от платформы web приложения не могут
работать с нативными функциями телефона.
Грань между web-приложением и мобильным сайтом очень тонкая, но разница есть.
Сайт содержит более статичную информацию и представляет собой нечто вроде цифровой
брошюры. В web-приложении пользователь может управлять какой-то частью этой
информации – создать собственные страницы, менять местами ссылки, тексты и прочее, что
делает его очень динамичным. Web-приложения – это онлайн-сервисы, которые раньше
разрабатывались на Flash, а теперь на HTML 5.
Говоря о web-приложениях, следует отметить современную тенденцию к
аналогичным вариантам реализации сайта для мобильных устройств. К таковым можно
отнести создание:

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 7


1. Адаптивного дизайна. Для реализации адаптивного дизайна обычно используются
CSS3 MediaQueries. В зависимости от размера экрана пользователь будет видеть разную
картинку. Преимуществами адаптивного дизайна является удобство разработки и
постоянный URL сайта. Однако есть и недостатки, такие как медленная загрузка из-за
большого объема сайта и переизбыток функций, не нужных для портативного доступа.
2. RESS (Responsive Design + Server Side). Использование RESS-технологии
предполагает адаптацию сайта к конкретному устройству. Из плюсов можно отметить
минимизацию трафика и возможность использования таргетирования, т. е.
соответствующего контента для разных устройств. Из минусов – сложность в разработке и
не налаженный механизм определения устройств со стороны самих устройств.
3. Отдельной мобильной версии сайта. Отдельная мобильная версия, она же web-
приложение, имеет множество плюсов, таких как быстрота и удобство пользования, а также
минусов, таких как наличие разных URL мобильной и десктопной версии, а для кого-то и
ограниченность в контенте, который урезается для мобильной версии.
Гибридное приложение объединяет в себе функции нативного приложения и web-
приложения. Это кроссплатформенное приложение, которое имеет возможность работать с
программным обеспечением телефона. Эти приложения, как и нативные, загружаются из
магазина приложений, но данные обновляют автономно. Поэтому им всегда нужно
подключение к Интернету – без него webфункции не работают. Разработка гибридного
приложения дешевле и быстрее, чем создание нативного приложения. Разница между ними
практически не ощущается, поэтому гибридные технологии наиболее популярны.
Если приложение не может работать без нативных функций мобильных устройств,
если очень важна высокая скорость обработки данных (игры, социальные сети, геолокация),
то лучший вариант – это нативное приложение. Когда скоростью работы можно пренебречь,
можно применять разработку гибридного приложения. В случае если пользователю нужна
только информация, которую он может получить с телефона при наличии Интернета,
следует обратить внимание на разработку web-приложения.
Подводя итоги, следует разбить выбор среды разработки и применяемых технологий
на два этапа: определение целевой аудитории и определение функций, которые должно
выполнять приложение. Существует множество основных языков программирования, таких
как Swift, C#, C++, Java, JavaScript, PHP, HTML, CSS, которые можно применять при
разработке приложений для мобильных устройств. Таким образом, возможности
современных технологий разработки позволяют создавать мобильные приложения
различной сложности. Выбор той или иной платформы зависит от бюджета и требований,
предъявляемых к будущему приложению.

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 8


КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 9
1.2 Выбор инструментария разработки
В последнее время для разработки мобильных игр используются движки. Их
существует большое количество. Давайте рассмотрим основные из них.
1. Unity Один из самых популярных движков на сегодня. Он позволяет
разрабатывать игры на таки платформы как мобильные устройства, ПК, Mac, Linux, консоли,
Facebook, WebGl, VR и другие.
Unity идеально подходит для разработки под мобильные устройства (но не только).
На нём сделаны Angry Birds 2, Hitman Go, Heartstone, Monument Valley, Fallout Shelter, Ori
and the Blind Forest, Pillars of Eternity, Firewatch, Inside, Pokémon Go, Super Mario Run,
Cuphead, Escape from Tarkov, Life Is Strange: Before the Storm и множество других
популярных игр.
В Unity можно спокойно разрабатывать как 2D, так и 3D-проекты. В Asset Store есть
много готовых платных и бесплатных решений: модели, текстуры, анимации и полноценные
проекты. Например, шутер про зомби. Очень много обучающих материалов как от самих
Unity, так и от энтузиастов на YouTube. Плюс множество плагинов для рекламы и внутри
игровых покупок.
Unity поддерживает язык программирования C #, по сравнению c С++ у него меньше
возможностей выстрелить себе в колено, в частности, это касается работы с памятью. Также
поддерживается JavaScript, который на самом деле UnityScript. Если писать код совсем лень
или нет навыков, есть плагины, которые позволяют делать игры без написания кода,
например, Playmaker. Правда, за него придется выложить 45 долларов.
Кто-то ругает Unity за графику, но на самом деле графику можно сделать красивой
на любом движке, просто в Unity она по умолчанию средняя. В последней версии движка
появился новый Rendering Pipeline, и с ним вполне можно делать графику на уровне топовых
AAA-проектов.
Стоимость движка: бесплатно, если разработчик зарабатывает на игре меньше $100
тысяч в год. Иначе — подписка, но тогда это не будет большой проблемой.
2. Unreal Engine очень продвинутый движок, сообщество которого в последнее время
быстро растет, чему способствует компания-разработчик Epic Games. По Unreal Engine
проводятся митапы, стримы, а в этом году прошла первая конференция, посвященная
разработке на Unreal.
Unreal Engine движок в первую очередь для тех, кто хочет делать проекты с крутой
графикой на ПК и консолях. Для мобильных устройств тоже подходит, но пока популярных
мобильных игр на Unreal Engine немного: Fortnite и PUBG. Ещё на нём сделаны серия Infinity
Blade, Batman: Arkham Knight и Life is Strange.

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 10


Unreal Engine поддерживает язык программирования: C++. Кого-то это может
отпугнуть, но есть решение — блюпринты. С их помощью теоретически можно разработать
игру, не написав ни строчки кода. На практике — это очень полезно для быстрой разработки
прототипов. Также есть магазин ассетов Unreal Engine Marketplace, где можно скачать
готовые модели, звуки и полноценные проекты.
Говорят, что Unreal Engine превосходит Unity по графике. На самом деле это просто
разные движки. Хотя частицы и пост-эффекты в Unreal Engine по умолчанию всё же
красивее.
Стоимость движка: 5% роялти, если разработчик зарабатывает на игре больше $3000
за квартал.
CryEngine Стал известным после выхода Crysis — прорывной для своего времени
игры. На нём вышло очень много крутых больших игр: первый Far Cry, MechWarrior Online,
Sniper: Ghost Warrior 3, Armored Warfare, Homefront: The Revolution, Prey 2017-го года.
Движок поддерживает такие платформы как ПК, консоли и VR. Официальной
поддержки мобильных устройств нет, но по слухам разрабатывать можно. Код движка
можно модифицировать.
Язык разработки C++. Совсем недавно появился Marketplace с ассетами.
Стоимость движка: начиная с пятой версии — 5% роялти с при доходе с игры более
$5000.
Unity обладает рядом преимуществ и отлично подходит для масштабных проектов
по разработке мобильных игр. Именно по выше изложенным критериям был выбран Unity,
как платформа для разработки игры.
C# — это язык программирования, предназначенный для разработки самых
разнообразных приложений, предназначенных для выполнения в среде . NET Framework.
Язык C# прост, типобезопасен и объектно-ориентирован.
Visual Studio работает преимущественно на платформе Windows. И если есть
необходимость перейти на Linux или Mac, то необходимо будет приобретать
дополнительные решения: Visual Studio Code (для Linux) и Visual Studio для Mac.  Главным
недостатком является то что версии Visual Studio для Mac и Linux имеют разный функционал
и внешний вид к которому придётся привыкать.
В конце первой главы/начале второй надо написать про архитектуру, использование
Transform или Rigidboy, ECS, шаблоны проектирования и тд. Даже если просто задать в
поисковике «выбор архитектуры Unity игры», сразу находятся вещи вроде
https://habr.com/ru/company/otus/blog/530056/ .

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 11


2 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
2.1 Программная реализация персонажа
Приложение разработано с помощью инструментальных средств интегрированной
среды разработки Visual Studio, с подключенным инструментарием Unity и написано на
языке C#.
На первом этапе разработке следует создать тестовые объекты, импровизированные
поле и персонаж их вид можно увидеть на рисунке 1.1.

Рисунок 2.1 – Тестовые объекты.


Далее создаётся скрипт AccelerationControler собирающий информацию об
акселерации и считавший и хранивший информацию об изменение акселерации.
Скрипт AccelerationControler.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class AccelerationControler : MonoBehaviour {

float lowPassValuey;
float accelerationy;
float lowPassValuex;
float accelerationx;
public float deltaAccelerationy;
public float deltaAccelerationx;

private void Start()


{

lowPassValuey = Input.acceleration.y;
lowPassValuex = Input.acceleration.x;

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 12


void Update()
{

accelerationy = Input.acceleration.y;
deltaAccelerationy = accelerationy - lowPassValuey;
lowPassValuey = Input.acceleration.y;

accelerationx = Input.acceleration.x;
deltaAccelerationx = accelerationx - lowPassValuex;
lowPassValuex = Input.acceleration.x;

}
}

В публичных переменных deltaAccelerationy и deltaAccelerationx храниться


информация об изменение акселерации по y и x соответственно. Они считаются в Update
каждый кадр
Далее на основе выше представленного скрипта создадим скрипт, отвечавший за
передвижения персонажа PlayerControler.
Скрипт PlayerControler.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class PlayerControler : MonoBehaviour {

float shakeDetectionThreshold = 0.3f;

float lowPassValue;
float acceleration;

Rigidbody2D rb;
bool jerkBottomKD = true;
bool OnGraunt;
bool JerkBottom = false;
public GameObject wave;
public GameObject shockwave;
public float t = 1;
public float speed = 10.0f;
public LayerMask layerMask;
AccelerationControler Acceleration;

void Start ()
{
rb = GetComponent<Rigidbody2D>();
JerkBottom = false;
Acceleration = GetComponent<AccelerationControler>();
}
private void OnCollisionEnter2D(Collision2D col)
{

if (JerkBottom == true)
{

JerkBottom = false;
Instantiate(wave, transform.position - new Vector3(0, 0.5f, 0),
Quaternion.Euler(180, 90, -90));

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 13


Instantiate(wave, transform.position - new Vector3(0, 0.5f, 0),
Quaternion.Euler(0, 90, -270));
Instantiate(shockwave, transform.position, Quaternion.Euler(0, 0, 0));

}
}

void Update()
{
Move();
Jamp();

}
void Move()
{
Vector3 dir = Vector3.zero;
dir.x = Input.acceleration.x;
dir *= Time.deltaTime;
transform.Translate(dir * speed);
}
void Jamp()
{
OnGraunt = Physics2D.Raycast(transform.position, new Vector2(0, -1), 0.6f,
layerMask);
if ((Acceleration.deltaAccelerationy >= shakeDetectionThreshold ||
Input.GetKeyDown(KeyCode.W)) & OnGraunt == true)
{

rb.AddForce(new Vector2(0, 11), ForceMode2D.Impulse);


OnGraunt = false;
StartCoroutine(JerkBottomKD(t));

}
if ((Acceleration.deltaAccelerationy <= -shakeDetectionThreshold ||
Input.GetKeyDown(KeyCode.S)) & OnGraunt == false & jerkBottomKD)
{
rb.velocity = new Vector3(0, 0);
rb.AddForce(new Vector2(0, -16), ForceMode2D.Impulse);
JerkBottom = true;
}
}
IEnumerator JerkBottomKD(float t)
{
jerkBottomKD = false;
yield return new WaitForSeconds(t);
jerkBottomKD = true;
}
}

В скрипте есть следующие переменные:


shakeDetectionThreshold – отклонение акселерации для активации действий
связанных с ней.
rb – ссылка на компонент Rigidbody2D персонажа.
jerkBottomKD – булевая переменная показывающая может ли совершать персонаж

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 14


рывок в низ.
OnGraunt - булевая переменная показывающая находится персонаж на земле.
JerkBottom = булевая переменная показывающая совершает персонаж рывок в низ
или нет.
Wave – ссылка на объект эффекта ударной волны.
Shockwave - ссылка на хитбокс ударной волны.
t – время которое персонаж не может совершать рывок после прыжка.
speed – скорость персонажа.
layerMask – слой с который персонаж может совершать прыжок.
Acceleration – ссылка на образец класса AccelerationControler.
Также скрипт содержит следующие функции:
Move – функция отвечавшие за передвижения персонажа. Она считывает показатели
акселерации телефона и изменяет положения персонажа с помощью transform.Translate() в
лево или в право. Вызывается каждый кадр в функции Update(). Таким образом при наклоне
телефона персонаж передвигается в лево или в право.
Jamp – функция отвечает за прыжок и рывок в низ. Сперва скрипт определяет
находится ли персонаж на земле с помощью Physics2D.Raycast и записывает результат в
OnGraunt. Далее идёт проверка, которая сравнивает deltaAccelerationy из Acceleration и
shakeDetectionThreshold так же проверяет находится персонаж на земле и если
deltaAccelerationy больше придаёт персонажу вертикальный импульс в верх, изменяет
OnGraunt на false и запускает корутину JerkBottomKD которая передаёт в jerkBottomKD true
и через время t меняет его обратно на false.
Так же в функции проводит обратную проверка и проверку может ли персонаж
совершать рывок в низ если условия удовлетворяют проверку, то персонажу придаётся
импульс в низ и в переменную JerkBottom передаётся true
Так же в скрипте есть функция OnCollisionEnter2D которая вызывается при
соприкосновении коллайдера персонажа с каким-либо другим коллайдером. Изначально в
этой функции проверяется совершает ли персонаж рывок в низ если да, то спавнится эффект
удара об землю, который можно увидит на рисунке 2.2, и хитбокс ударной волны который
наносит урон врагам.

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 15


Рисунок 2.2 – Эффект удара об землю.

Следующий скрипт PayerXP отвечает за здоровье персонажа.


Скрипт PayerXP
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class PayerHP : MonoBehaviour {

public int HP = 3;

public GameObject button;


PlayerControler playerControler;

void Start ()
{
playerControler = GetComponent<PlayerControler>();
}

void Update () {

}
public void TakeDamage(int Damage)
{
HP-= Damage;
if (HP <= 0)
{
playerControler.enabled = false;

button.SetActive(true);
}
}
public void Restart()
{
SceneManager.LoadScene(0);
}
}

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 16


Этот скрипт содержит три переменных HP которая содержит количество здоровье
персонажа, переменная button содержит в себе ссылку на кнопку перезапуска на сцене и
переменную playerControler который содержит ссылку на объект класса PlayerControler.
Скрипт имеет функции TakeDamage и Restart. Функция TakeDamag принимает
целочисленное значение Damage это то количество урона получил персонаж. Далее от
здоровья персонажа обнимается полученный им урон и идёт проверка если здоровье
персонажа меньше или равно нулю. Если да, то отключается playerControler, скрипт
отвечавший за передвижения персонажа, и становится активна кнопка перезапуска. Функция
Restart запускается при нажатии кнопки пере запуска и перезапускает сцену. На рисунке 2.3
можно увидит кнопку перезапуска при смерти персонажа.

Рисунок 2.3 – Кнопка перезапуска.

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 17


2.2 Программная реализация врагов.
Для реализации противников нужен тестовый объект, который возьмёт на себя роль
врага. Для теста в виде врага выступит оранжевый квадрат, который можно ведёт на рисунке
2.4.

Рисунок 2.4 – Моделька врага.


Далее пойдут скрипты, связанные с врагами. Следующий скрипт Enemy отвечает за
передвижение врага.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour


{

public float speed = 1f;


public float b = 1f;
public Transform sensor;
public LayerMask layerMask;
bool wall = false;

float x;
public float range;

void Start ()
{
x = transform.position.x;
}

void Update ()

{
Move();

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 18


private void Move()
{
transform.Translate(new Vector3( b, 0, 0)*Time.deltaTime);
wall = Physics2D.OverlapCircle(sensor.position, 0.1f, layerMask);
if (wall || x -transform.position.x> range || transform.position.x - x >
range)
{
transform.localScale = new Vector3(transform.localScale.x * -1,
transform.localScale.y, transform.localScale.z);
if (b > 0)
{
b = -speed;
}
else
{
b = speed;
}
}
}

В скрипте содержит следующие переменные:


speed – скорость врага.
sensor - сенсор с помощью которого определяется есть ли впереди стена
layerMask – список слоёв которые враг считает стеной
wall – булевая переменная которая показывает есть ли пере врагом стена или нет
x – начальные координаты появления врага
range – расстояние на которое враг может отойти от начальной точки.
Изначально враг двигается в одном направление при помощи transform.Translate.
Также при помощи Physics2D.OverlapCircle проверяется не наткнулся ли враг на стену. Далее
идёт проверка ели враг наткнулся на стену или отошёл сильно от начальной точки то он
разворачивается в противоположную сторону.

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 19


Далее пойдёт скрипт EnemyGetsDamage отвечает за нанесение урона врагам.
Скрипт EnemyGetsDamage
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyGetsDamage : MonoBehaviour {

private void OnTriggerEnter2D(Collider2D coll)


{

if(coll.tag== "Damaging")
{
Destroy(gameObject);
}

В скрипте присутствует одна функция OnTriggerEnter2D в которой идёт проверка


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

Последний скрипт созданный для врагов это TouchDamage. С помощью этого


скрипта враги наносят урон персонажу при прикосновении.
Скрипт TouchDamage.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TouchDamage : MonoBehaviour {

public int damage;

void OnCollisionEnter2D(Collision2D coll)


{

if (coll.gameObject.tag == "Player")
{

coll.gameObject.GetComponent<PayerHP>().TakeDamage(damage);

}
}

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 20


В скрипте содержится одна переменная damage это урон который должен нанести
враг при прикосновении и одна функция OnCollisionEnter2D в которой проверяется враг
соприкоснулся с персонажем или с чем-то другим. Ели он соприкоснулся с персонажем то
скрипт вызывает функцию TakeDamage из скрипта PayerHP который находится на персонаже
и передаёт ей параметр damage, функция TakeDamage в свою очередь уменьшает количество
здоровья персонажа.
И последний скрипт Trap. Этот этот скрипт отвечает за ловушку, которая не даёт
персонажу двигается. Сама ловушка подставляет из себя вытенутый вертикально полу
прозрачный прямо угольник, который лежит на земле. Его можно видит на рисунке 2.5
Скрипт Trap
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Trap : MonoBehaviour {

AccelerationControler Acceleration;
bool In;
float caunter = 0;
PlayerControler player;
private void OnTriggerEnter2D(Collider2D col)
{
if (col.tag == "Player")
{
player = col.GetComponent<PlayerControler>();
player.enabled = false;
Acceleration = col.GetComponent<AccelerationControler>();
In = true;
}
}

void Update ()
{
if (In)
{
caunter += Mathf.Abs( Acceleration.deltaAccelerationy);
if (caunter >= 30)
{
player.enabled = true;
Destroy(gameObject);
}
}
}
}

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 21


Рисунок 2.5 – Вид ловушки.
Скрипт содержит следующие переменные:
Acceleration – ссылка экземпляр класса AccelerationControler.
In – булевая переменная показывающая находится ли персонаж в ловушки.
caunter – счётчик того насколько персонаж выбрался из ловушки
player – ссылка на экземпляр класса PlayerControler.
При прикосновении к ловушке персонажа срабатывает функция OnTriggerEnter2D и
условие в ней col.tag == "Player". Тогда на персонаже отключается PlayerControler
отвечающий за передвижение персонажа и In становится true.
В Update проверяется наступил ли персонаж в ловушку если да, то к caunter каждый
кадр прибавляется модуль deltaAccelerationy. И когда caunter становится больше
определённого числа то PlayerControler на персонаже включается, а ловушка удаляется.

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 22


2.3 Тестирование
Игра тестировался на платформе Android. На начальном этапе тестирования,
проводившемся после написания основного программного кода, были выявлены недочёты,
прыжков персонажа. Источником проблемы был недочёт в коде, в результате сильного
встряски телефона импульс, приложенный к персонажу, накладывается друг на друга. В
результате совершался очень высокий прыжок. В последствии все проблемы подлежали
устранению, и приложение стало работать корректно. Код до и после?

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 23


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

Рисунок 3.1 – Игровое поле.


При повороте телефона персонаж передвигается на лево персонаж передвигается в
лево, а при повороте в право передвигается в право. При рывке телефона в верх персонаж
совершает прыжок, на рисунке 3.2 видно персонажа в прыжке.

Рисунок 3.2 – Персонаж в прыжке.

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 24


Если при нахождении в воздухе тряхнуть телефон в низ то персонаж совершит
рывок в низ и при приземлении запустит ударную волну которая убивает врагов. На рисунке
3.3 виден момент приземления и уничтожение врага.

Рисунок 3.3 – Уничтожение врага приземлением с рывком.


При попадании в ловушку управление персонажем полностью отключается. На
рисунке 3.4 видно ка персонаж попал в ловушку и на панели с право видно, как отключился
PlayerControler отвечающий за передвижение персонажа.

Рисунок 3.4 – Попадание персонажа в ловушку.


Чтобы выбраться из ловушки необходимо трясти телефон обычно из-за этого кода
персонаж выбирается из ловушки он делает это с прыжком. На рисунке 3.5 видно как
персонаж выбрался из ловушке.

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 25


Рисунок 3.5 – Персонажа выбрался из ловушки.

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 26


4 Анализ механик игры
После проведение тестирования и исправления неисправностей для лучшего анализа
была выдана бета версия игры некоторому количеству человек после чего они поделились
своим мнением в ходе сбора информации что 80% посчитала полное управление персонажем
с помощью акселерации телефона не обычным и требующем некоторое время на освоение.
Так же 50% испытуемых выразили тревожность что такой тип управление может стать
причиной случайного падения мобильного устройства в результате его повреждения. Также
20% сообщили что считывают данное управление не удобным и не способствует получение
приятного осушения от игры. Также один из испытуемых дал весьма развёрнутый и
субъективный отзыв по отношению к бете версии игры: «Игра 10 кубических веревок /10,
сюжет моё почтение похлеще чем в "одни из нас", даже с учётом того, что графика
подвинулась на столько, что многие игры её даже не переплюнут, я уже не говорю, что мой
старый мобильник её в 30 кадров в секунду тянет, хотя говорят, что человеческий глаз
способен видеть всего семь, а лор, наверное, лучше, чем в дарк соус, всем рекомендую!» -
сказал Икаев Н.Д.Где анализ? Какв результата анализа, каковы выводы? Игра выполняет
свои развлекательные функции? Можно выпускать на рынок или это прототип и нужно что-
то доработать?

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 27


ЗАКЛЮЧЕНИЕ
Целью разрабатываемого приложения являлись исследование работы с Unity,
проектирование и разработка беты мобильной игры.
В результате была создана мобильная игра и реализацией управления при помощи
акселерации телефона. Также были собраны данные для анализа и были проанализированы
эти данные и сделан вывод что… Unity подходит для изначально поставленных целей?
Скорректированных целей? Код, арт, звуки для коммерческого релиза?
Таким образом, все поставленные задачи были выполнены, следовательно, основная
цель, сформулированная для курсовой работы, достигнута.

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 28


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Абрамян, Михаил Visual C# на примерах (+ CD-ROM) / Михаил Абрамян. - М.:
БХВ-Петербург, 2012. - 496 c.
2. Агуров, Павел C#. Сборник рецептов (+CD-ROM) / Павел Агуров. - М.: БХВ-
Петербург, 2007. - 432 c.
3. Бишоп, Дж. С# в кратком изложении / Дж. Бишоп, Н. Хорспул. - М.: Бином.
Лаборатория знаний, 2011. - 472 c.
4. Васильев, Алексей C#. Объектно-ориентированное программирование / Алексей
Васильев. - М.: Питер, 2012. - 320 c.
5. Зиборов, В. В. Visual C# 2012 на примерах / В.В. Зиборов. - М.: БХВ-Петербург,
2013. - 480 c.
6. Зиборов, Виктор Visual C# 2010 на примерах / Виктор Зиборов. - М.: "БХВ-
Петербург", 2011. - 432 c.
7. Касаткин, А. И. Профессиональное программирование на языке си. Управление
ресурсами / А.И. Касаткин. - М.: Высшая школа, 1992. - 432 c.
8. Культин, Н. Microsoft Visual C# в задачах и примерах (+ CD-ROM) / Н. Культин. -
М.: БХВ-Петербург, 2012. - 314 c.
9. Подбельский, В. В. Язык С#. Базовый курс / В.В. Подбельский. - М.: Финансы и
статистика, 2013. - 408 c.
10. Рендольф, Ник Visual Studio 2010 для профессионалов / Ник Рендольф и др. - М.:
Диалектика, 2011. - 584 c.
11. Скит, Джон C# для профессионалов. Тонкости программирования / Джон Скит. -
М.: Вильямс, 2014. - 608 c.
12. Троелсен, Эндрю Язык программирования C# 5.0 и платформа .NET 4.5 / Эндрю
Троелсен. - М.: Вильямс, 2015. - 633 c.
13. Фленов, Михаил Библия C# (+ CD-ROM) / Михаил Фленов. - М.: БХВ-Петербург,
2011. - 560 c.
14. Фримен, Адам LINQ. Язык интегрированных запросов в C# 2010 для
профессионалов / Адам Фримен , Джозеф Раттц-мл.. - М.: Вильямс, 2011. - 656 c.
15.Unity Game Development in 24 Hours. Mike Geig

КП-2019 - кафедра №35 ИТиЗИ – группа 331-ПРИ – Гончар Т.С. – 09.03.04 с. 29

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