№ состава Расход материалов, кг Предел прочности в возрасте 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){
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.