Научная статья на тему 'Реализация взаимодействия имитационных моделей боевых машин в составе симулятора военного полигона в среде unity'

Реализация взаимодействия имитационных моделей боевых машин в составе симулятора военного полигона в среде unity Текст научной статьи по специальности «Компьютерные и информационные науки»

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

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

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

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

Текст научной работы на тему «Реализация взаимодействия имитационных моделей боевых машин в составе симулятора военного полигона в среде unity»

УДК 004.94 : 623.6

А. А. ГУСЕВ, Р. С. МОЛОТОВ

РЕАЛИЗАЦИЯ ВЗАИМОДЕЙСТВИЯ ИМИТАЦИОННЫХ МОДЕЛЕЙ БОЕВЫХ МАШИН В СОСТАВЕ СИМУЛЯТОРА ВОЕННОГО ПОЛИГОНА В СРЕДЕ UNITY

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

Ключевые слова: unity, моделирование, симуляторы, стрельба.

Введение

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

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

Авторы рассматривают одну из сторон реализации такого взаимодействия - создание динамической модели боевой машины БМ-21 комплекса РСЗО Град.

Выбранный для разработки игровой движок Unity имеет в составе IDE визуальный конструктор, поддерживает популярные языки программирования (C#, JS) и содержит физический движок nVidiaPhysX, что значительно облегчает проектирование и разработку динамических имитационных моделей и их взаимодействия.

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

Создание снаряда

Для того чтобы реализовать в виртуальном пространстве симулятора визуализацию стрельбы, в первую очередь необходимо создать игровой объект, который будет являться [физической и визуальной] моделью снаряда. Ради упрощения примера в качестве такой модели был выбран стандартный примитив - сфера (рис. 2). Но в качестве модели снаряда может быть использована любая 3d-модель, повторяющая внешний вид реального объекта. Для создания сферы необходимо нажать ПКМ на соответствующем игровом объекте в дереве иерархии объектов виртуального пространства и выбрать соответствующий пункт 3DObject, Sphere (рис. 1). В рассматриваемом примере объект снаряда должен быть прикреплён к модели боевой машины.

© Гусев А. А., Молотов Р. С., 2016

Рис. 1. Создание сферы

Рис. 2. Снаряд

После создания сферы необходимо привести её размеры к реальным размерам снаряда. Для этого необходимо уменьшить параметр scale с 1 до 0.1. Конечный вид игрового объекта, который будет использован для реализации алгоритма залпового огня, продемонстрирован на рис. 2.

Особенности визуализации взаимодействия имитационных боевых машин на примере стрельбы

Далее необходимо разработать скрипт, который будет отвечать за запуск снарядов. Стоит отметить, что для моделирования различных орудий, систем залпового огня, в зависимости от количества и расположения орудий, наличия различных режимов ведения огня (залповый, автоматический и т. д.) необходимо реализовывать соответствующие программные алгоритмы. Однако есть один общий принцип: во время выстрела необходимо создавать новый экземпляр снаряда на позиции, соответствующий текущему стволу (массив стволов БМ-21 представлен на рис. 3), и прикладывать к нему соответствующую силу для того, чтобы расчёт полета снаряда производился физическим движком (в Unity -nVidiaPhysX). Обобщённо весь процесс стрельбы и алгоритм можно разбить на следующие этапы:

1. Создание экземпляра снаряда.

2. Перемещение (установка) снаряда в позицию стрельбы.

3. Произведение выстрела (визуализация, приложение силы к снаряду).

Листинг 1. Переменные, константы и ссылки на объекты

public Transform Amm; public GameObject PosAmm; public GameObject PointUp; public GameObject PointDown; public int SpeedAmm = 800; const float Z = 98.1f; const float X = 33.25f; const float Y = 53.69f; constfloatdelta = 6f;

Чтобы реализовать подобный алгоритм, в скрипт необходимо передать ссылки на объект снаряда, указать позицию выстрела и т. д. (см. листинг 1). Рассмотрим объявление и инициализацию объектов более подробно:

• Amm - ссылка на префаб (шаблон) снаряда;

• PosAmm - пустой объект, имеющий то же самое положение, что и первый вылетающий из орудия снаряд;

• PointUp, PointDown - источники света, имитирующие вспышку при выстреле из орудия;

• SpeedAmm - скорость вылета снаряда (благодаря модификатору доступа public, можно изменять прямо из интерфейса IDEUnity, в панели Inspector);

• Z, X, Y - координаты первого ствола орудия (см. рис. 3);

• delta - переменная, на значение которой происходит перемещение снаряда после каждого выстрела (благодаря тому, что сечение ствола орудия имеет форму круга, смещение и по столбцам, и по рядам пакета стволов одинаковое).

За создание экземпляра снаряда отвечает функция Instantiate, принимающая в качестве параметров префаб объекта, который нужно клонировать, а также положение клонируемого объекта и угол его поворота (см. листинг 2).

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

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

Листинг 2. Создание экземпляра объекта

Transform g = (Transform) Instantiate(amm, transform.position, transform.rotation);

Листинг 3. Константы для расчёта положения снаряда

const int Height = 4; const int Width = 9;

пройденных рядов орудия. Конец ряда орудия определяет переменная Width, количество рядов определяет переменная Height. Если счетчик i доходит до значения Width, а j до значения Height - произведены все четыре залпа, то оба счётчика обнуляются, позиция стрельбы принимает положение первого выстрела.

Листинг 4. Расчет счётчиков

if (i >= Width) {

i = 0; j++;

}

if (j >= Height) {

i = 0; j = 0;

}

Зная в текущий момент времени значения счетчиков i и _), можно получить координаты позиции стрельбы, отталкиваясь от координат снаряда при первом выстреле.

Рис. 3. Пакет стволов БМ-21 комплекса РСЗО Град

Таким образом, текущая позиция стрельбы является вектором, компоненты X и У которого рассчитываются с помощью вычитания из координат позиции первого выстрела дельты смещения, пропорциональной текущим значениям счётчиков, а компонент Ъ остаётся неизменным (см. листинг 5). Смещение необходимо вычитать из начальных координат, т. к. направление обхода пакета стволов (ход залпа) противоположно направлению осей в виртуальном пространстве симулятора.

Далее можно перейти к завершающему этапу алгоритма - непосредственно к произведению и визуализации выстрела. Запуск сна-

ряда производится с помощью API-функции AddForce, которая принимает в качестве параметра импульс объекта, к которому прикладывается сила. Метод AddForce должен быть вызван для компонента Rigidbody объекта снаряда, являющегося его физической моделью (см. листинг 5). Для реалистичности производимого выстрела добавляются вспышки света при каждом выстреле (рис. 4).

Листинг 5. Функция выстрела

void Fire() {

Transform g = (Transform) Instantiate(amm,transform.position, transform.rotation); PosAmm.transform.localPosition = new Vector3(X - i * delta, Y - j * delta, Z); g.GetComponent<Rigidbody>() .AddForce(transform.forward * speedAmm); point.GetComponent<Light>().enabled = true; point1.GetComponent<Light>().enabled = true; i++;

if (i >= Width) {

i = 0; j++;

}

if (j >= Height) {

i = 0; j = 0;

}

}_

Для завершения работы над процессом стрельбы нужно привязать выполнение разработанного метода Fire к вводу пользователя - нажатию кнопки стрельбы (R). Также, если кнопка огня не нажата, необходимо отключать визуализацию вспышек выстрела (см. листинг 6). Конечный результат визуализации стрельбы БМ-21 комплекса РСЗО Град представлен на рисунке 5.

Листинг 6. Привязка выстрела к вводу пользователя

void Update() {

if (Input.GetKeyUp (KeyCode.R)) { Fire ();

} else {

point.GetComponent<Light>().enabled

= false;

point1.GetComponent<Light>().enabled = false; }

}

Рис. 4. Вспышки при выстреле

Рис. 5. Визуализация выстрела орудия БМ-21

Заключение

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

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

СПИСОК ЛИТЕРАТУРЫ

1. Русскоязычное сообщество разработчиков на Unity. URL: http://www.unity3d.ru/ (дата обращения: 01.08.2016 г.).

2. Официальный сайт Unity3D. URL: http://unity3d.com/ru/ (дата обращения: 01.08.2016 г.).

3. Справочник API Unity. URL: http://docs.unity3d.com/ru/current/ScriptReferenc e/index.html (дата обращения: 01.08.2016 г.).

4. Галкин А. В., Аноприенко А. Я. Использование технологии Unity 3D при разработке универсальной плоскопанельной тренажерно-обучающей системы // Материалы IV Всеукраинской научно-технической конференции студентов, аспирантов и молодых учёных «Информационные управляющие системы и компьютерный мониторинг (ИУС КМ 2013)» - 24-25 апреля 2013 г. - Донецк: ДонНТУ, 2013.

5. Creighton, R.-H. Unity 3D Game Development by Example Beginner's Guide -Packt Publishing, 2010. - 384 c.

6. Hocking Joe. Unity in Action: Multiplatform Game Development in C#, Joe Hocking - Manning, 2015. - 441 c.

Гусев Артем Андреевич, студент УлГТУ, кафедра «Вычислительная техника». Молотов Роман Сергеевич, младший научный сотрудник НИО УНИ УлГТУ.

Поступила 18.08.2016 г.

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