close

Вход

Забыли?

вход по аккаунту

?

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

код для вставкиСкачать
УДК 004.94 : 623.6
А. А. ГУСЕВ, Р. С. МОЛОТОВ РЕАЛИЗАЦИЯ ВЗАИМОДЕЙСТВИЯ ИМИТАЦИОННЫХ МОДЕЛЕЙ
БОЕВЫХ МАШИН В СОСТАВЕ СИМУЛЯТОРА ВОЕННОГО
ПОЛИГОНА В СРЕДЕ UNITY
Рассматриваются особенности применения API-функций и примеры визуализации стрельбы
боевых машин для взаимодействия объектов в виртуальной среде симуляторов. Определяется ареал
применения каждого из подходов, их преимущества и недостатки.
Ключевые слова: unity, моделирование, симуляторы, стрельба.
Введение
Создание снаряда
В современном образовательном процессе
активно внедряется и применяется программное обеспечение для обучения и контроля
знаний, для тренировки алгоритмов и
инструкций поведения и работы человека в тех
или иных ситуациях. В большинстве случаев прохождение
пользователем программ тренировки состоит
из закрепления реакции на различные
изменения объектов виртуальной среды,
которые также могут являться и агентами
других пользователей симулятора. В любом
случае
остаётся
актуальной
проблема
взаимодействия имитационных [динамических] моделей в среде симулятора. Авторы рассматривают одну из сторон
реализации такого взаимодействия – создание
динамической модели боевой машины БМ-21
комплекса РСЗО Град. Выбранный для разработки игровой
движок Unity имеет в составе IDE визуальный
конструктор, поддерживает популярные языки
программирования (C#, JS) и содержит
физический
движок
nVidiaPhysX,
что
значительно облегчает проектирование и
разработку динамических имитационных
моделей и их взаимодействия. Далее на примере реализации стрельбы из
орудия боевой машины будет рассмотрен
процесс создания экземпляров объектов
виртуального
пространства
симулятора,
реализация их динамической и физической
моделей, позволяющих отдельным объектам
взаимодействовать в контексте общего
виртуального пространства.
Для того чтобы реализовать в виртуальном
пространстве
симулятора
визуализацию
стрельбы, в первую очередь необходимо
создать игровой объект, который будет
являться [физической и визуальной] моделью
снаряда. Ради упрощения примера в качестве
такой модели был выбран стандартный
примитив – сфера (рис. 2). Но в качестве модели снаряда может быть использована любая
3d-модель, повторяющая внешний вид реального объекта. Для создания сферы необходимо
нажать ПКМ на соответствующем игровом
объекте в дереве иерархии объектов виртуального пространства и выбрать соответствующий пункт 3DObject, Sphere (рис. 1).
В рассматриваемом примере объект снаряда
должен быть прикреплён к модели боевой
машины.
© Гусев А. А., Молотов Р. С., 2016
44
Рис. 1. Создание сферы Вестник УлГТУ 3/2016
Рис. 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;
Вестник УлГТУ 3/2016
Чтобы реализовать подобный алгоритм, в
скрипт необходимо передать ссылки на объект
снаряда, указать позицию выстрела и т. д. (см.
листинг 1). Рассмотрим объявление и инициализацию объектов более подробно:  Amm – ссылка на префаб (шаблон)
снаряда;  PosAmm – пустой объект, имеющий то же
самое
положение,
что
и
первый
вылетающий из орудия снаряд;  PointUp, PointDown – источники света,
имитирующие вспышку при выстреле из
орудия;  SpeedAmm – скорость вылета снаряда
(благодаря модификатору доступа public,
можно изменять прямо из интерфейса
IDEUnity, в панели Inspector);  Z, X, Y – координаты первого ствола
орудия (см. рис. 3);  delta – переменная, на значение которой
происходит перемещение снаряда после
каждого выстрела (благодаря тому, что
сечение ствола орудия имеет форму круга,
смещение и по столбцам, и по рядам
пакета стволов одинаковое). За создание экземпляра снаряда отвечает
функция Instantiate, принимающая в качестве
параметров префаб объекта, который нужно
клонировать, а также положение клонируемого
объекта и угол его поворота (см. листинг 2).
Листинг 2. Создание экземпляра объекта
Transform g = (Transform) Instantiate(amm,
transform.position, transform.rotation);
Для того чтобы произвести переключение
на следующий ствол орудия (сменить позицию
стрельбы) после выстрела, необходимо
вычислить координаты смещения. Для такого
расчёта необходимо
ввести
константы,
характеризующие матрицу пакета стволов
орудия (листинг 3).
Листинг 3. Константы для расчёта положения
снаряда
const int Height = 4;
const int Width = 9;
В дальнейшем вводятся две переменные i и
j, являющиеся счётчиками. При каждом
последующем выстреле i инкрементируется до
тех пор, пока не достигнет конца ряда орудия.
При достижении конца ряда орудия счётчик i
обнуляется и инкрементируется счётчик j,
который служит индикатором количества
45
пройденных рядов орудия. Конец ряда орудия
определяет переменная Width, количество
рядов определяет переменная Height. Если
счетчик i доходит до значения Width, а j до
значения Height – произведены все четыре
залпа, то оба счётчика обнуляются, позиция
стрельбы принимает положение первого
выстрела.
ряда производится с помощью API-функции
AddForce, которая принимает в качестве
параметра импульс объекта, к которому
прикладывается сила. Метод AddForce должен
быть вызван для компонента Rigidbody объекта
снаряда,
являющегося
его
физической
моделью (см. листинг 5). Для реалистичности
производимого
выстрела
добавляются
вспышки света при каждом выстреле (рис. 4).
Листинг 4. Расчет счётчиков
Листинг 5. Функция выстрела
if (i >= Width) {
i = 0;
j++;
}
if (j >= Height) {
i = 0;
j = 0;
}
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;
}
}
Зная в текущий момент времени значения
счетчиков i и j, можно получить координаты
позиции стрельбы, отталкиваясь от координат
снаряда при первом выстреле.
Рис. 3. Пакет стволов БМ-21 комплекса РСЗО Град Таким образом, текущая позиция стрельбы
является вектором, компоненты X и Y которого
рассчитываются с помощью вычитания из
координат позиции первого выстрела дельты
смещения,
пропорциональной
текущим
значениям счётчиков, а компонент Z остаётся
неизменным (см. листинг 5). Смещение
необходимо вычитать из начальных координат,
т. к. направление обхода пакета стволов (ход
залпа) противоположно направлению осей в
виртуальном пространстве симулятора. Далее можно перейти к завершающему
этапу алгоритма – непосредственно к произведению и визуализации выстрела. Запуск сна46
Для завершения работы над процессом
стрельбы нужно привязать выполнение
разработанного
метода
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;
}
}
Вестник УлГТУ 3/2016
Рис. 4. Вспышки при выстреле
Рис. 5. Визуализация выстрела орудия БМ-21
Заключение
Рассмотрен пример реализации ведения
огня имитационных моделей боевых машин в
составе симулятора военного полигона.
Продемонстрирован способ создания и
запуска снарядов, добавления визуальных
эффектов в динамическую имитационную
модель РСЗО. Разработанный скрипт ведения
огня одиночными выстрелами может быть
легко модернизирован для моделирования
залпового огня орудия путём нескольких
последовательных вызовов метода Fire.
Вестник УлГТУ 3/2016
В силу декомпозиции процесса залпового
огня и организации алгоритма отдельного
выстрела в обособленном методе, соблюдена
идея разделения логики и представления
модели. Благодаря этому
модель легко
модернизировать и дополнять: добавить
различные
режимы
огня,
изменить
визуализацию выстрела, дыма, использовать
различные 3d-модели снарядов.
СПИСОК ЛИТЕРАТУРЫ
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 г.
47
Документ
Категория
Без категории
Просмотров
5
Размер файла
655 Кб
Теги
unit, среды, военного, взаимодействия, боевые, реализации, симулятор, состав, моделей, полигон, машина, имитационных
1/--страниц
Пожаловаться на содержимое документа