Академический Документы
Профессиональный Документы
Культура Документы
Учреждение образования
«Гомельский государственный университет
имени Франциска Скорины»
Факультет математики и технологий программирования
Кафедра математических проблем управления и информатики
Научный руководитель
ассистент кафедры МПУиИ ____________________ В. А. Прохоренко
Гомель 2022
Содержание
1 ВВЕДЕНИЕ ........................................................................................................ 3
2 ОПИСАНИЕ СРЕДСТВ РАЗРАБОТКИ ПРИЛОЖЕНИЯ .............................................. 4
2.1 ЯЗЫК ПРОГРАММИРОВАНИЯ C# ..................................................................... 4
2.2 МЕЖПЛАТФОРМЕННАЯ СРЕДА РАЗРАБОТКИ КОМПЬЮТЕРНЫХ ИГР UNITY....... 5
2.3 ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТКИ VISUALSTUDIO ................................ 8
3 ОПИСАНИЕ ПРОГРАММНОЙ РЕАЛИЗАЦИИ РАЗРАБОТАННОГО ПРИЛОЖЕНИЯ .... 10
ЗАКЛЮЧЕНИЕ ....................................................................................................... 18
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ ........................................................... 19
ПРИЛОЖЕНИЕ А ................................................................................................... 20
2
1 ВВЕДЕНИЕ
Преддипломная практика проходила в Обществе с ограниченной
ответственностью «Ай Ти Умница» в период с 24.01.2022 г. по 19.02.2022 г.
KIBERone – Международная сеть КиберШкол программирования и
цифровых технологий для детей от 6 до 14 лет.
Цель проекта: содействовать ускоренному цифровому развитию детей и
подготовка высококвалифицированных It-специалистов, внедряя
эффективные модели образования, доступные для тиражирования во всех
странах. Развивающие программы для детей пишут специалисты трех стран
Россия, Америка, Швеция.
На занятиях дети учатся писать коды, создавать сайты, мобильнее
приложения, 3D-игры, этичному блоггингу, написанию чат-ботов, фото-
видеомонтажу, смм, интернет-продвижению, кибербезопасности и даже
блокчейну.
Инновационная развивающая среда KIBERone была создана в 2016 году
разработчиком из Силиконовой Долины Борисом Каленовым и Членом
Российской Гильдии Маркетологов (с высшим математическим и
it образованием) Апальковой Ольгой.
Компания является резидентом SKolkovo, партнером Microsoft и
федеральных компаний СКБ-контур, УГМК.
В KIBERone – это школа будущего, где царит особая атмосфера
уважения, творчества и создания, здесь вместо преподавателей с детьми
работают наставники (тьюторы), которые передают свой опыт резидентам
КиберШколы, дети взаимодействуют друг с другом, создавая совместные
проекты и участвуют в мозговых штурмах, здесь проводят интерактивные
переменки с полезным перекусом со шведского стола.
Цели практики: изучение новых возможностей Unity, изучение новых
возможностей Visual Studio, изучение современного стандарта языка
программирования С#.
Задачи практики: разработать Android приложение WaterRacing 2D для
резидентов Международной школы программирования KiberOne.
3
2 ОПИСАНИЕ СРЕДСТВ РАЗРАБОТКИ ПРИЛОЖЕНИЯ
4
2.2 МЕЖПЛАТФОРМЕННАЯ СРЕДА РАЗРАБОТКИ
КОМПЬЮТЕРНЫХ ИГР UNITY
5
Рисунок 2 - Начальная сцена проекта в Unity
6
Unity 3D поддерживает систему Level Of Detail (сокр. LOD), суть
которой заключается в том, что на дальнем расстоянии от игрока
высокодетализированные модели заменяются на менее детализированные, и
наоборот, а также систему Occlusion culling, суть которой в том, что у
объектов, не попадающих в поле зрения камеры не визуализируется геометрия
и коллизия, что снижает нагрузку на центральный процессор и позволяет
оптимизировать проект. При компиляции проекта создается исполняемый
(.exe) файл игры (для Windows), а в отдельной папке — данные игры (включая
все игровые уровни и динамически подключаемые библиотеки).
Движок поддерживает множество популярных форматов. Модели,
звуки, текстуры, материалы, скрипты можно запаковывать в формат
.unityassets и передавать другим разработчикам, или выкладывать в свободный
доступ. Этот же формат используется во внутреннем магазине Unity Asset
Store, в котором разработчики могут бесплатно и за деньги выкладывать в
общий доступ различные элементы, нужные при создании игр. Чтобы
использовать Unity Asset Store, необходимо иметь аккаунт разработчика Unity.
Unity имеет все нужные компоненты для создания мультиплеера. Также
можно использовать подходящий пользователю способ контроля версий. К
примеру, Tortoise SVN или Source Gear.
В Unity входит Unity Asset Server — инструментарий для совместной
разработки на базе Unity, являющийся дополнением, добавляющим контроль
версий и ряд других серверных решений.
Как правило, игровой движок предоставляет множество
функциональных возможностей, позволяющих их задействовать в различных
играх, в которые входят моделирование физических сред, карты нормалей,
динамические тени и многое другое. В отличие от многих игровых движков, у
Unity имеется два основных преимущества: наличие визуальной среды
разработки и межплатформенная поддержка. Первый фактор включает не
только инструментарий визуального моделирования, но и интегрированную
среду, цепочку сборки, что направлено на повышение производительности
разработчиков, в частности, этапов создания прототипов и тестирования. Под
межплатформенной поддержкой предоставляется не только места
развертывания (установка на персональном компьютере, на мобильном
устройстве, консоли и т. д.), но и наличие инструментария разработки
(интегрированная среда может использоваться под Windows и Mac OS).
Третьим преимуществом называется модульная система компонентов
Unity, с помощью которой происходит конструирование игровых объектов,
когда последние представляют собой комбинируемые пакеты
функциональных элементов. В отличие от механизмов наследования, объекты
в Unity создаются посредством объединения функциональных блоков, а не
помещения в узлы дерева наследования. Такой подход облегчает создание
прототипов, что актуально при разработке игр.
7
В качестве недостатков приводятся ограничение визуального редактора
при работе с многокомпонентными схемами, когда в сложных сценах
визуальная работа затрудняется. Вторым недостатком называется отсутствие
поддержки Unity ссылок на внешние библиотеки, работу с которыми
программистам приходится настраивать самостоятельно, и это также
затрудняет командную работу. Ещё один недостаток связан с использованием
шаблонов экземпляров (англ. prefabs). С одной стороны, эта концепция Unity
предлагает гибкий подход визуального редактирования объектов, но с другой
стороны, редактирование таких шаблонов является сложным. Также, WebGL-
версия движка, в силу специфики своей архитектуры (трансляция кода из C#
в С++ и далее в JavaScript), имеет ряд нерешённых проблем с
производительностью, потреблением памяти и работоспособностью на
мобильных устройствах.
Ещё один недостаток — это потеря точности float в компоненте
Transform по всем трем осям. Начинается это проявляться на координатах
10000 и больше, после этой координаты начинаются артефакты.
Первая версия Unity появилась в 2005 году, когда игровой движок был
анонсирован на Worldwide Developers Conference. Изначально Unity
предназначался исключительно для компьютеров Mac, а в августе вышло
обновление, позволяющее работать под Windows. В следующих версиях
постепенно добавлялись новые платформы и развёртывания:
межплатформенный веб-плеер в 2006-м, iPhone в 2008-м, Android в 2010-м, и
далее на игровых консолях Xbox и Playstation.
Есть возможность создавать приложения для запуска в браузерах с
помощью специального подключаемого модуля Unity (Unity Web Player), а
также с помощью реализации технологии WebGL. Ранее была
экспериментальная поддержка реализации проектов в рамках модуля Adobe
Flash Player, но позже команда разработчиков Unity приняла сложное решение
по отказу от этого.
В декабре 2009 года Gamasutra назвал Unity одним из самых
значительных участников на рынке игровых компаний.
8
Рисунок 3 - Microsoft Visual Studio
9
3 ОПИСАНИЕ ПРОГРАММНОЙ РЕАЛИЗАЦИИ
РАЗРАБОТАННОГО ПРИЛОЖЕНИЯ
10
Класс MoveAndSpawnRoad обеспечивает автоматическое создание и
последующее удаление карты по необходимой координате. Дорога создается
на основании общего префаба и при выходе из поля зрения основной камеры
вызывается функция Destroy.
11
Класс LoadScene содержит функции перехода на другую сцену и выхода
из игры, а также обнуление результатов игры.
Класс Score – это класс подсчета очков игрока и записи в текстовое поле.
12
Класс MoveObject позволяет генерируемым доскам встречного
движения двигаться и в необходимой точке вне игрового поля удаляться.
13
3 Схема взаимодействия пользователя с разработанным
приложением
14
Рисунок 10 - Стартовая позиция пользователя
15
Рисунок 12 - Генерация досок и движение игрока при выборе кнопки «SELECT
LEVEL»
16
Рисунок 15 - Генерация досок и движение игрока при выборе третьего уровня
17
ЗАКЛЮЧЕНИЕ
18
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
19
ПРИЛОЖЕНИЕ А
*********************MoveObjects*****************
using UnityEngine;
public class MovaObjects : MonoBehaviour {
public float speed = 5f;
void FixedUpdate() {
transform.Translate(Vector3.forward * speed * Time.deltaTime);
if(transform.position.y < -6)
Destroy(gameObject);
}
}
***************MoveAndSpawnRoad********************
using UnityEngine;
using UnityEditor;
20
using System.Collections;
21
public static int resultValues = Player.resultValues;
Text result;
void Start()
{
result = GetComponent<Text>();
}
void Update()
{
result.text = "Result: " + resultValues;
}
}
*********************Result*****************
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
}
}
*********************SOT*****************
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
void Start()
{
rec = GetComponent<RectTransform>();
}
void Update()
{
if (rec.offsetMin.y > checkPos)
{
rec.offsetMin += new Vector2(-rec.offsetMin.x, speed);
rec.offsetMax += new Vector2(-rec.offsetMax.x, speed);
}
}
}
*********************SOB*****************
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
22
{
public float speed, checkPos = 0f;
private RectTransform rec;
void Start(){
rec = GetComponent <RectTransform> ();
}
void Update(){
if (rec.offsetMin.y < checkPos)
{
rec.offsetMin += new Vector2(-rec.offsetMin.x, speed);
rec.offsetMax += new Vector2(-rec.offsetMax.x, speed);
}
}
}
23