Научная статья на тему 'Разработка мультиплеерной игры на платформе Unity 3D'

Разработка мультиплеерной игры на платформе Unity 3D Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
5945
407
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
UNITY / РАЗРАБОТКА ИГРЫ / КОМПЬЮТЕР МОДЕЛИРОВАНИЕ / КОМПЬЮТЕРНАЯ ИГРА / КРОССПЛАТФОРМЕННОСТЬ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Романов Дмитрий Сергеевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Разработка мультиплеерной игры на платформе Unity 3D»

№ состава Расход материалов, кг Предел прочности в возрасте 7 суток, МПа

Цемент Песок Щебень Вода

1 400 600 1400 160 30

2 300 650 1350 150 25

3 225 750 1250 158 15

При изготовлении применяли

цемент марки М500 (Белгородский завод),

щебень гранитный фракций 5-10 и 10-20 мм отношение 1: 1,

песок кварцевый с модулем крупности, равным 2.

Кубики, указанных в таблице составов, были испытаны на морозостойкость по основному методу. Морозостойкость кубиков :

- состава 1, имеющих открытую пористость 4,1 % составила 300 циклов,

- состава 2 имеющих открытую пористость 5,6 % составила 200 циклов,

- состава 3 имеющих открытую пористость 7,5 % составила 50 циклов,

Сделанные образцы находились в течение 7 дней в обычных температурно-влажностных условиях. В дальнейшем их насыщали влагой до постоянной массы и направляли в морозильную камеру, обеспечивающую изменения температуры в интервале от -50 до -20 °С, после чего образцы подвергали сжатию. Тонкий слой льда на поверхности образцов мешал испарению влаги. Результаты испытаний явно свидетельствуют о сильном снижении прочности бетона на первых циклах переменного действия отрицательных температур, в результате миграции незамерзшей жидкости в порах геля к кристаллам льда в микро-и макрокапиллярах и, как следствие этого, увеличением этих кристаллов. Снижение прочности бетона в значительной степени зависит от водоцементного отношения (В/Ц).

Весьма серьезное падение прочности (до 30 %) наблюдается у кубиков состава 3 с наибольшим водоцементным отношением (0,7).

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

Список литературы

1. Невиль А.М. «Свойства бетона»; «Стройиздат»; Москва. 1972 г. 344 с.

2. ГОСТ 5802-86. Растворы строительные. Методы испытаний.

3. ГОСТ 10060.0-95. Бетоны. Методы определения морозостойкости. Общие требования.

РАЗРАБОТКА МУЛЬТИПЛЕЕРНОЙ ИГРЫ НА ПЛАТФОРМЕ UNITY

3D

Романов Д.С.

Романов Дмитрий Сергеевич — студент магистратуры, кафедра дискретной математики и информатики, Чувашский государственный университет им. И.Н. Ульянова, г. Чебоксары

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

Ключевые слова: Unity, разработка игры, компьютер моделирование, компьютерная игра, кроссплатформенность.

УДК 004.4'2Umty3D ББК 32.972

Игровая индустрия стремительно вливается в жизнь человека. Не только современная молодежь, но и взрослое поколение проводит большое количество времени за играми на различных устройствах, будь то персональный компьютер, мобильное устройство или игровая консоль. Из-за этого аспекта, разработчики игр выпускают все больше и больше игр каждый год. Кто-то находит данное занятие, как средство для отдыха и развлечения, для других это инструмент для получения новых знаний. <...Видеоигры признаны видом искусства правительством США в лице Национальной программы поддержки искусства.. .> [1].

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

Современные игры, для обеспечения качественной графики разрабатываются на специализированных, либо самописных игровых движках. Наиболее распространенными из них являются Unity 5, Unreal Engine 4, CRYENGINE V с использованием набора API DirectX 11 или 12 версий, которые дают возможность использовать элементы компьютера, для придания объектам наилучшей графики.

Игровой движок Unity 5 распространяется бесплатно, при условии того, что вы или ваша компания имеет годовой доход с проектов, написанных на игровом движке Unity, не более $100 000, сюда не входят сборы с пожертвований. Но свыше $100 000 разработчику придется платить royalty, установленные в размере 5% от годового заработка автора игры. Разработчики не забрасывают свой проект и постоянно выкладывают новые версии своей программы с периодичностью от 1 до 5 обновлений в месяц.

Цель данной работы: изложение этапов и их подробное описание создания мультиплеерного шутера на платформе Unity 3D.

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

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

Рис. 1. Интерфейс Unity

• "Scene View" - окно, в котором пользователь может создавать игровые уровни, размещая и перемещая объекты.

• "Game View" - окно, предназначенное для предпросмотра игры, т. е. юзер может увидеть, как будет выглядеть игра, нажав на "play" в верхней части экрана.

• "Asset Store" - окно, в которое интегрирована торговая площадка, позволяющая скачивать бесплатно или покупать необходимые для проекта ассеты. <...Ассетами называют цифровой объект, преимущественно состоящий из однотипных данных, неделимая сущность, которая представляет часть игрового контента и обладает некими свойствами.. .> [3].

• "Hierarchy" показывает какие объекты расположены на сцене. Также отображает отношения «родительский» ^ «дочерний» объекты, по-другому называемый "parenting"

• "Project View" содержит список всех файлов игры.

• "Inspector" является котекстнозависимым окном, отображающее свойства объекта, выделенного в данный момент.

• "Toolbar" - окно, в середине которого отображены кнопки запуска, паузы и покадровое воспроизведение проекта. С левой стороны имеются кнопки навигации по сцене, перемещение, вращение и изменение размера объекта на сцене. Имеются переключатель для переключения между центральной точкой и точкой опоры ("Center" и "Pivot"), а также переключатель между локальными и глобальными координатами ("Global" и "Local").

• "Layers" - позволяет включать и выключать свойства объектов на определенных слоях

• "Layout" - позволяет переключаться между различными режимами отображениями окон и создавать свои варианты.

Перед созданием проекта нужно «подготовить почву» - найти модели для будущих объектов. Необходимые объекты можно купить или скачать бесплатно на торговой площадке Unity. Также разработчиками выпущен стандартный набор ассетов, имеющий различные текстуры, модели, скрипты и многое другое.

Создание сцены начинается с постройки поверхности. В данном случае требуется 3D-объект "Plane". Но, если в игре необходим создать какой-либо рельеф, то необходимо использовать объект "Terrain".

В самом "Terrain" содержаться такие настройки поверхности как:

• "Raise/Lower Terrain" - позволяет создавать холмы, горы.

• "Paint Height" - кисть, создающая возвышенности определенных высот.

• "Smooth Height" - инструмент, сглаживающий неровности вершин.

• "Paint Texture" - кисть, накладывающая текстуру на рельеф и объекты "Terrain".

• "Place Trees" - инструмент, создающий деревья.

• "Paint Details" - создает такую растительность, как: трава, кусты и другие.

• "Terrain Settings" - окно, отвечающее за настройки "Terrain".

Добавить объект "Plane" можно через окно "Hierarchy", либо через меню навигаций (GameObject ^ 3D Object ^ Plane), задав нужные размеры, а также его позиционирование в окне "Inspector".

File Edit Assets GameObject Component Mobile Input Window Help

Create Empty Ctrl+Shifti-N I

':= Hiera nch у Create Empty Child Alt-i-Shift+N

Cranta (С?All 3D Object > Cube Sphere Capsule Cylinder

«3Main+ 2D Object > Effects > Light > Audio >

Main Camera Directional Ligl

Plane

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

Далее необходимо создать стены, чтобы будущий персонаж не падал за границы (GameObject ^ 3D Object ^ Cube), совместно добавляя различных блоков на сцену. Сцена готова и ее уже можно использовать для различных баталий.

Следующим этапом необходимо создать персонажа. Через "Project View" в пути (Standard Asssets ^ Characters ^ FirstPersonCharacter ^ Prefabs ^FPSController), добавим камеру, способную перемещаться по сцене, поместив на сцену. Для будущего удобства, следует переименовать FPSController в Player. Далее помещаем модель игрока из директории (Standard Asssets ^ Characters ^ ThirdPersonCharacter ^ Models ^ Ethan) в дочерний объект Player -FirstPerson. Тем самым у камеры появляется оболочка игрока. Требуется изменить параметры камеры, содержащиеся в скрипте FirstPersonContoller,чтобы у каждого персонажа была своя камера. Для данного действия нужно изменить класс MonoBehavior на NetworkBehavior в (public class FirstPersonController: MonoBehaviour), указав в void update и void FixedUpdate условие, что будет возможно управление камерой, если игрок является локальным игроком. Проверяется с помощью условия: if(!isLocalPlayer){ return;}

Далее убрать присвоение камерой игрока главной камеры, указанной в строке (m_Camera = Camera.main;). Выключение главной камеры (m_Camera.enabled = false;), и ее слушателя (m_Camera.gameObject. GetComponent<AudioListener>().enabled = false;). Также принудительно добавить игроку камеру FirstPersonCharacter, перетаскивая ее из окна иерархии объектов на сцене в окно Inspector объекта Player в блок FirstPersonController (Script) свойства Camera.

Network Identity {Script) G Ф.

Server Only cannot be set for Local Player Authority objects

T© H Network Transform (Script) G

Рис. 3. Network Idetity и Network Transform

Для будущего мультиплеера игры в свойствах игрока, нужно добавить два компонента Network Identity и Network Transform (рис. 3). Network Identity отвечает за уникальный идентификатор объекта в сети, Network Transform - за синхронизацию передвижения объекта и его вращение на сцене. Для плавного изображения объекта, рекомендуется выставить максимальное значение для Network Send Rate. Параметр Local Player Authority у Network Identity дает возможность управлять локальному пользователю данным объектом. В корневой папке создается папка с названием "Prefab", перенося в нее префаб игрока.

Так как игра жанра «шутер», следовательно, игроку требуется иметь оружие. Его тоже можно скачать с Asset Store либо сделать его из 3D объектов "Cube". Модель оружия должна быть дочерним элементом камеры персонажа, чтобы игрок мог управлять положением оружия.

Для работы игры в сети нужен пустой объект с компонентами Network Manager и Network Manager HUD.

Network Manager - является менеджером сети. Его функции: управление состоянием игры, сценой, появлением персонажа на сцене, организацию матчей и настройкой.

Network Manager HUD - компонента, предоставляющая пользовательский интерфейс для управления сетевой игрой. Далее в Network Manager необходимо разместить префаб игрока, в последующем игра автоматически будет добавлять его на сцену, при подключении нового игрока к игре.

Префаб - тип ассетов, содержащий в себе все объекты и их свойства.

Для нанесения повреждения противнику создается скрипт, прикрепленный к игроку, в котором будут указываться, каким способом и в какого соперника произведено попадание и какой урон нанесен ему. А также создается скрипт с названием PlayerInfo, в котором будет содержаться информация об игроке. Алгоритм стрельбы будет производится следующим образом: при нажатии левой кнопкой мыши, будет выпускаться луч из камеры игрока на курсор мыши. Если попадание прошло по объекту с тегом "Player", то ему наносится урон.

Для исполнения данного алгоритма потребуется передавать ссылки и значения на объект. Рассмотрим объявление переменных и ссылок.

• public int Damage = 25; - переменная, отвечающая за повреждение.

• public Camera cameraTR; - ссылка на камеру игрока.

• private RaycastHit hit; - переменная, содержащая информацию об объекте попадания лучом.

• private Ray ray; - содержит информацию о направлении луча.

Добавляем условие, при нажатии на кнопку вызывается метод Shoot.

if(Input. GetKeyDown (KeyCode.Mouse0)){

Shoot();

Метод Shoot() содержит в себе:

ray = cameraTR.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit, 1000)){ if (hit.transform.tag == "Player"){ string id = hit.transform.name;

CmdShoot(id, Damage); }}

Метод CmdShoot(): [Command]

void CmdShoot (string Id, int dm){

GameObject go = GameObject.Find(Id);

go.GetComponent<UnityStandardAssets.Characters.FirstPerson.PlayerInfo>(). Get_Damage(dm); }}

В функции "Shoot" луч выходит из камеры в положение курсора в момент нажатия мыши. Далее, если физический Raycast диаметром 1000 попадает в объект с тэгом Player, привязывая данный луч к переменной hit, то создается новая переменная с именем "id", в которую записывается имя объекта попадания. Здесь CmdShoot сохраняет идентификатор объекта и урон.

Функция CmdShoot отправляет информацию на сервер об игроке, в которого произведено попадание и повреждение с параметрами string Id и int dm соответственно. Создается переменная go, происходит поиск объекта по его уникальному идентификатору. Обращаясь к объекту, к которому привязан скрипт PlayerInfo и сообщает, что ему был нанесен урон.

Скрипт PlayerInfo должен выводить на экран имя игрока, его текущее здоровье. Для этого в префабе игрока создается пустой объект с добавление в него компонента Text Mesh. Для работы данных функций в скрипте необходимы следующие компоненты [SyncVar] public int Health = 100; public TextMesh tm;

В Скрипте PlayerInfo создается переменная Health, которая благодаря атрибуту SyncVar синхронизируется с сервером.

Создается переменная tm, с ссылкой на объект c Text Mesh. Внутри void Start() вставляем:

transform.name = "Player " + GetComponent<NetworkIdentity>().netId.ToString(); Health = 100;

У пустого объекта с компонентой Text Mesh меняется свойство Text на имя Player с добавочным идентификатором игрока и указывается его здоровье.

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

public void Get_Damage(int dm){ Health -= dm; if (Health <= 0){

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Application.LoadLevel(Application.loadedLevel);}}

Функция Get_Damage принимает значение dm из PlayerShooting отправляемое из функции CmdShoot. Далее вычитает урон из здоровья игрока. Если здоровье меньше 100, то сцена перезапускается.

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

Данная функция высвечивает здоровье локального персонажа в левом верхнем углу. private void OnGUI(){ if (isLocalPlayer){

GUI.Label(new Rect(Screen.width - 100, 25, 200, 50), "Health: " + Health);}}

Рис. 4. Отображение здоровья персонажей

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

Список литературы

1. Игровой Ассет. [Электронный ресурс] // Википедия: свободная энцикл., 2017. Режим доступа: https://ru.wikipedia.org/wiki/Игровой_ассет/ (дата обращения 01.06.2018).

2. Руководство пользователя Unity. [Электронный ресурс]. Режим доступа: https://docs.unity3d.com/ (дата обращения: 01.06.2018).

3. Русскоязычное сообщество Unity3d.ru. [Электронный ресурс]. Режим доступа: http://unity3d.ru/ (дата обращения: 01.06.2018).

4. Официальный сайт Unity3d. [Электронный ресурс]. Режим доступа: https://unity3d.com/ru/ (дата обращения: 01.06.2018).

5. Джозеф Х. Unity в действии. Мультиплатформенная разработка на C#. Спб: Питер, 2016. 336 с.

ВЫБОР ОПТИМАЛЬНОЙ КОНФИГУРАЦИИ ДРЕВОВИДНЫХ МАШИН ЧЕТНОСТИ ПРИ ИХ ИСПОЛЬЗОВАНИИ ДЛЯ ГЕНЕРАЦИИ СЕКРЕТНОГО КЛЮЧА ШИФРОВАНИЯ Ушаков А.К.

Ушаков Андрей Константинович — студент магистратуры,

кафедра информационных технологий и системы, Институт управления, автоматизации и телекоммуникаций Дальневосточный государственный университет путей сообщения, г. Хабаровск

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

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

ДРЕВОВИДНАЯ МАШИНА ЧЕТНОСТИ (ДМЧ)

Древовидная машина четности (ДМЧ) — это особый вид многоуровневой искусственной нейронной сети прямого распространения. Структура ДМЧ представлена на рисунке 1.

i Надоели баннеры? Вы всегда можете отключить рекламу.