close

Вход

Забыли?

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

?

Bulgakov1

код для вставкиСкачать
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное
образовательное учреждение высшего образования
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ
Д. А. Булгаков, А. В. Никитин, А. С. Топчий
ОСНОВЫ РАБОТЫ
НА СИМУЛЯТОРАХ
Лабораторный практикум
УДК 004.94
ББК 32.973я73
Б 90
Рецензенты:
кандидат технических наук, доцент В. И. Исаков
Утверждено
редакционно-издательским советом университета
в качестве лабораторного практикума
Булгаков Д. А.
Б90 Основы работы на симуляторах: лабораторный практикум / Д. А. Булгаков, А. В. Никитин, А. С. Топчий. – СПб.:
ГУАП, 2018. – 102 с.
Приведены цикл лабораторных работ по изучению устройства
и правила эксплуатации симуляторов XD-Motion, Fly-Motion и
5D-Motion, а также основы их программирования.
Лабораторный практикум предназначен для студентов направления 09.04.01 «Информатика и вычислительная техника».
УДК 004.94
ББК 32.973я73
Учебное издание
Булгаков Дмитрий Алексеевич,
Никитин Александр Васильевич,
Топчий Алексей Сергеевич
ОСНОВЫ РАБОТЫ
НА СИМУЛЯТОРАХ
Лабораторный практикум
Публикуется в авторской редакции
Компьютерная верстка А. Н. Колешко
Сдано в набор 30.06.18. Подписано к печати 22.08.18. Формат 60 × 84 1/16.
Усл. печ. л. 6,0. Тираж 50 экз. Заказ № 313.
Редакционно-издательский центр ГУАП
190000, Санкт-Петербург, Б. Морская ул., 67
© Булгаков Д. А., Никитин А. В.,
Топчий А. С., 2018
© Санкт-Петербургский государственный
университет аэрокосмического
приборостроения, 2018
ВВЕДЕНИЕ
Из-за растущего потенциала и удешевления компьютерных технологий все более широко используются симуляторы движения
в целях обучения и тренажа водителей транспортных средств, исследований и оценки поведения водителей и пассажиров, а также
развлечений. Под симуляцией понимается способ реализации модели во времени [1], а под симулятором движения – устройство, которое включает в себя пассажиров и создает у них ощущение нахождения в движущемся транспортном средстве [2, 3].
Симуляторы движения могут быть классифицированы в зависимости от того, управляет пассажир транспортным средством (например, летные тренажеры, симуляторы вождения и автогонок и
др.), или он является пассивным ездоком (аттракционы для тематических парков, 5D кинотеатры и др.) [4].
Симуляторы движения имеют ряд преимуществ по сравнению
с реальными транспортными средствами, в том числе управляемость, воспроизводимость и стандартизация; простота сбора данных; возможность столкнуться с опасными условиями вождения,
не подвергая себя физическому риску; новая возможность обратной
связи и обучения [5].
Однако у симуляторов есть несколько известных недостатков и
проблем, в том числе ограниченная физическая, перцептивная и поведенческая точность; недостаток исследований, демонстрирующих
обоснованность моделирования; дискомфорт симулятора в условиях жесткой езды [5].
В лаборатории компьютерной графики, виртуальной и дополненной реальности кафедры вычислительных систем и сетей ГУАП
в настоящее время создается открытая многофункциональная сеть
симуляторов на базе XD-Motion, Fly-Motion и 5D-Motion компании
«СЭМЗ-Вымпел» [6], которая является одним из монополистов на
рынке аттракционов России и СНГ.
Материалы практикума подготовлены ассистентом Д. А. Булгаковым (разделы 1.1, 1.4), доцентом, к.т.н. А. В. Никитиным (разделы 1.2, 1.3) и программистом А. С. Топчим (разделы 2.1–2.5).
1. Department of Defense. Modeling and Simulation (M&S) Glossary.
Modeling and Simulation Coordination Office. October 1, 2011. [Электронный ресурс].
3
URL:http://www.acqnotes.com/Attachments/DoD%20M&S%20
Glossary%201%20Oct%2011.pdf (дата обращения: 31.05.2018).
2. Phillip Denne.MOTION PLATFORMS OR MOTION SEATS?
Transforce Developments Ltd. 2004-09-01. [Электронныйресурс].
URL:
http://www.advancedmotion.net/pdf/cyber2.pdf (дата обращения:
31.05.2018).
3. Slob, J.J. State-of-the-Art Driving Simulators, a Literature
Survey. – Eindhoven University of Technology. Eindhoven, August
2008. [Электронный ресурс]. URL: https://pdfs.semanticscholar.org
/6860/7a6048238a5159149969b056eb4e8648363a.pdf(дата обращения: 31.05.2018)
4. Andrew Rollings and Ernest Adams on Game Design. New Riders
Publishing. 2003. P. 395–415.
5. J.C.F. de Winter, P.M. van Leeuwen, R. Happee. Advantages and
Disadvantages of Driving Simulators: A Discussion. – In Proceedings
of Measuring Behavior-2012. Utrecht, TheNetherlands, August 28–31,
2012. P. 47–50.
6. Сайт компании «СЭМЗ Вымпелl». [Электронный ресурс].URL:
http://kb-tk.ru/production/ (дата обращения: 31.05.2018).
4
1. ЛАБОРАТОРННЫЙ ПРАКТИКУМ
Лабораторная работа № 1
«Изучение работы на симуляторе XD-Motion»
Цель работы – изучение устройства автосимулятора XD-Motion,
его включение и выключение, игровых режимов, требований безопасности и овладение навыками оператора.
1. Порядок выполнения
Данная работа выполняется под наблюдением преподавателя
двумя студентами – один в роли оператора, другой – игрока.
1) Изучить методические указания.
2) Сдать коллоквиум.
3) Расписаться в журнале техники безопасности.
4) Включить первый симулятор XD-Motion и управляющий
планшет.
5) Провести калибровку и убедиться, что механика работает исправно.
6) Запустить однопользовательскую игру, введя все необходимые
параметры.
7) Сымитировать возникновение внештатной ситуации и аварийно остановить симулятор.
8) Включить второй симулятор XD-Motion и планшет.
9) Провести калибровку и убедиться, что механика работает исправно.
10) Запустить многопользовательскую игру, введя все необходимые параметры.
11) Выключить симуляторы.
12) Подготовить отчет.
13) Защитить отчет.
Примечание: на этапах 4–10 студент-оператор составляет протокол
работы и делает необходимые фотографии для включения в отчет.
2. Технические сведения и техника безопасности
2.1. Состав симулятора
Симулятор XD-Motion – игровой автомат, имитирующий поведение реального автомобиля. Симулятор представляет собой
5
электромеханическое
устройство.
Механизм приводится в действие
четырьмя электромоторами, управление которыми осуществляется
комбинированным промышленным
ПК с установленным на него специализированным программным обеспечением. Симулятор XD-Motion
представляет собой бесфундаментную сборно-разборную конструкцию
(рис. 1.1).
Кабина пилота закреплена на
трех подвижных опорах, которые
во время игры наклоняют кабину,
имитируя действующие на пилота
силы. Вся конструкция установлена
Рис. 1.1. Симулятор XD-Motion на металлических направляющих
и является подвижной. Отдельный
электромотор отвечает за повороты
симулятора на угол до 160°. Подробные технические характеристики приведены в приложении.
2.2. Включение
Проверьте, чтобы вилка питания была включена в розетку 220В,
зарядите и включите планшет. Стоит обратить внимание на правильное подключение Фазы и Нейтрали в розетку. На вилке Фаза
обозначена буквой Л (L).
Перед включением убедитесь, что в кресле симулятора нет пилота и нет посторонних предметов. В случае возникновения посторонних шумов или ошибок обратитесь к преподавателю.
2.2.1. Включение основного модуля симулятора
Отожмите две красные грибовидные кнопки, повернув их механизм по направлению стрелки. Первая кнопка находится справа от
руля, другая находится внизу, слева от задней выдвижной опоры
(ноги) симулятора.
Нажмите зелёную кнопку включения частотных преобразователей (рис. 1.3), которая находится рядом с красной грибовидной
кнопкой внизу симулятора. Должен прозвучать характерный щелчок срабатывания контактора.
6
Рис. 1.2. Кнопки включения питания
(красная) и частотных преобразователей (зеленая)
Рис. 1.3. Кнопка включения
компьютера (зеленая)
Для включения компьютера, находящегося внутри симулятора,
нажмите вторую зелёную кнопку внизу, справа от задней выдвижной опоры (ноги) симулятора. При правильном включении руль должен начать калибровку (вращение из стороны в сторону).
2.2.2. Включение телевизора
Кнопка включения телевизора находится снизу по центру экрана. Она представляет собой джойстик и также осуществляет навигацию по меню телевизора. Для включения телевизора ее необходимо просто нажать. На экране отобразится загрузка Windows, после
чего симулятор автоматически перейдёт в режим ожидания запуска игры. В режиме ожидания симулятор выводит на экран статическую картинку или заранее подготовленный видеофайл.
2.2.3. Включение управляющего планшета
Кнопка включения планшета находится на правой боковой грани устройства под качелькой громкости. Ее необходимо нажать и
удерживать порядка 3 секунд до появления экрана загрузки планшета. После загрузки ОС Android необходимо запустить приложение PlatMotion ярлыком с рабочего стола.
2.3. Подготовка к игре
Планшеты заранее сконфигурированы так, чтобы с любого из
них можно было управлять всеми тремя симуляторами (двумя XD и
одним Fly). Соединение между управляющим планшетом и симулятором происходит по беспроводной сети Wi-Fi, поэтому всегда дер7
жите планшет в непосредственной близости от симулятора. После
включения симулятора на соединение может потребоваться некоторое время. Сигнал Wi-Fi обязательно должен быть устойчивым,
иначе запуск игры будет невозможен.
2.3.1. Ввод PIN-кода
После запуска, программа PlatMotion попросит ввести PIN-код
(рис. 1.4). Поскольку он уже прописан в настройках, оператору достаточно нажать “Принять”. Если PIN-код введен верно, то управляющая программа попытается установить связь с симулятором.
2.3.2. Запуск калибровки
После соединения на экране появится приглашение к калибровке симулятора. Убедитесь, что рядом с симулятором никто не находится, ничего не мешает его беспрепятственному движению, в кресле нет посторонних предметов. Затем нажмите “ОК” на управляющем планшете (рис. 1.5).
Начнется калибровка, которая на исправном автомате осуществляется без пауз и остановок. Всего калибровка состоит из трех действий:
Рис. 1.4. Ввод PIN-кода
8
Рис. 1.5. Подготовка к калибровке
– Симулятор поворачивается против часовой стрелки;
– Симулятор начинает движение по часовой стрелке и одновременно все его ноги выдвигаются вверх;
– Как только все ноги достигнут верхнего положения, и установка повернется в крайнее правое положение, начнется движение
в обратную сторону – в начальную позицию, т. е. ноги опустятся
вниз, а симулятор вернется в центральное положение.
Если поведение симулятора отличается от описанного выше (какая-либо нога не двигается, остановилась вверху, быстро дергается вверх-вниз или симулятор не вращается), или на управляющем
планшете появилось сообщение об ошибке калибровки, то остановите автомат аварийной кнопкой и сообщите сотруднику лаборатории.
2.3.3. Ввод суммы и запуск игры
Если автомат прошёл калибровку без ошибок, то на экране планшета можно будет выбрать время игры, введя сумму (рис. 1.6).
После нажатия «Дальше» на экране появится окно выбора режима игры (рис. 1.7).
2.3.4. Запуск однопользовательской игры
Рис. 1.6. Ввод суммы
Рис. 1.7. Выбор режима
9
В окне выбора режима игры выбрать «Одиночный». Далее выбирается игра. Всего доступно три варианта:
– RFactor 2;
– 4×4 Полный привод;
– UniCarGame.
Для RFactor и 4×4 после выбора игры так же из списка выбирается сначала машина, а затем трасса.
Рис. 1.8. Выбор игры, машины и трассы
Далее необходимо выбрать уровень сложности. Он влияет только
на игру RFactor, однако присутствует в списке выбора и у 4×4. Всего
их три:
– Новичок – используется сильное автоматическое подруливание; автоматическая коробка передач;
– Гонщик – не используется автоматическое подруливание; автоматическая коробка передач;
– Профи – не используется автоматическое подруливание; ручная коробка передач.
После уровня сложности выбирается режим работы (актуально
для всех трех игр). Режимы работы различаются максимальным
ходом поршней и допустимым ускорением при ходе поршней. Всего
их три:
– Для ребенка;
– Стандартный;
10
– Жесткий.
После режима работы выбирается задействовать ли стерео с использованием 3D-очков. Здесь используются специальные очки,
которые идут в комплекте с телевизором. Для получения 3D-очков
обратитесь к преподавателю.
Рис. 1.9. Выбор сложности, режима работы и стерео
2.3.5. Запуск многопользовательской игры
Для работы сетевой игры все платформы должны находиться
в одной подсети. Если платформы объединены через сеть интернет,
то необходимо проложить туннели, обеспечив работу платформ так,
как если бы они находились в одной сети. Например, это можно сделать с помощью программы Hamachi. Все настройки (планшетов,
компьютеров, конфигурационных файлов) напрямую зависят от IPадресов. Это стоит учитывать при изменении конфигурации сети.
В окне выбора режима игры выбрать “Многопользовательский”,
затем выбрать одну из двух игр:
– RFactor 2;
– UniCarGame.
Пройти пункты, аналогичные выбору одиночной игры.
Включить второй симулятор XD-Motion по инструкции и запустить на нем ту же самую игру с теми же самыми настройками, которые вы выбрали в предыдущих пунктах.
11
Сервером становится симулятор XD1 (у окна), вне зависимости
от порядка запуска. После подсоединения обоих игроков запустится многопользовательская игра.
2.4. Посадка и начало игры
Когда на экране телевизора появится предупреждение с правилами пользования симулятором, пилот может сесть в кресло. Порядок действий игрока:
1) Сесть в кресло ОБЯЗАТЕЛЬНО! С ЛЕВОЙ СТОРОНЫ СИМУЛЯТОРА, где к базе прикручена металлическая накладка.
2) Необходимо пристегнуться и проверить ремни безопасности.
3) Далее прочитать правила игры и требования безопасности
с экрана телевизора.
4) Для начала игры нажать зеленую кнопку «Старт», расположенную справа от руля.
Рис. 1.10. Кнопка аварийной остановки (красная)
и кнопка запуска игры (зеленая)
2.5. Аварийная остановка игры
Нажатие на любую из двух красных грибовидных кнопок приводит к остановке игры. Причём нажатие нижней аварийной кнопки – к полному обесточиванию симулятора, кроме компьютера и телевизора. После этого может потребоваться полный его перезапуск.
12
Если ситуация не несет угрозы для игрока, то экстренную остановку следуют выполнять нажатием верхней кнопки «Стоп», расположенной справа от руля (см. рис. 1.10). После экстренной остановки
необходимо вернуть симулятор в начальное положение. Для этого:
1) Отожмите аварийную красную кнопку «Стоп», повернув ее по
часовой стрелке (см. рис. 1.10);
2) Нажмите и удерживайте зеленую кнопку запуска игры до тех
пор, пока симулятор не опустится и не повернется в начальное положение.
2.6. Выключение и перезапуск симулятора
Для выключения симулятора требуется:
1) Нажать зелёную кнопку включения/выключения компьютера
симулятора (см. рис. 1.3);
2) Нажать нижнюю аварийную красную кнопку выключения силовой части симулятора. (см. рис. 1.2)
3) Выключить телевизор. Для этого надо нажать на кнопкуджойстик, расположенную на нижней грани телевизора по центру,
выбрать в появившемся наэкранном меню пункт “Выключить” и
нажать кнопку-джойстик еще раз.
4) Выключить управляющий планшет нажатием и удерживанием кнопки включения.
Перезапуск осуществляется через выключение и включение симулятора при помощи зелёной кнопки включения компьютера.
Внимание! При перезапуске симулятора отключается Wi-Fi, и
планшет теряет связь. На экране может появиться ошибка потери
связи с симулятором. Чтобы связь появилась, подождите пару минут, пока планшет не восстановит ее автоматически.
3. Техника безопасности игрока
Оператор перед посадкой игрока в кабину выдает ему для ознакомления Памятку Игрока и Правила безопасной эксплуатации симулятора (ламинированные листы А4).
4. Контрольные вопросы
1. Состав симулятора.
2. Органы управления симулятором.
3. Включение симулятора.
4. Подготовка к игре.
13
5. Выбор игры и ее параметров.
6. Органы управления автомобилем.
7. Посадка игрока в симулятор и запуск игры.
8. Высадка игрока после окончания игры.
9. Экстренная остановка и аварийная эвакуация.
10. Выключение и перезапуск симулятора.
Рекомендуемая литература
1) Руководство оператора XD-Motion. – СЭМЗ «Вымпел», 2016.,
25 стр.
2) Симулятор XD-Motion. Технический паспорт изделия. – СЭМЗ
«Вымпел», 2016., 8 стр.
14
Лабораторная работа № 2
«Изучение работы на симуляторе Fly-Motion»
Цель работы – изучение устройства автосимулятора XD-Motion,
его включение и выключение, игровых режимов, требований безопасности и овладение навыками оператора.
1. Порядок выполнения
Данная работа выполняется под наблюдением преподавателя
двумя студентами – один в роли оператора, другой – игрока.
1. Изучение методических указаний и техники безопасности.
2. Сдача коллоквиума.
3. Роспись в журнале техники безопасности.
4. Студент-оператор получает индивидуальное задание.
5. Студент-оператор подготавливает симулятор к работе.
6. Студент-оператор обеспечивает инструктаж студента-игрока,
его посадку и высадку, игровой процесс, имитацию аварийной ситуации.
7. Студент-оператор выключает симулятор.
8. Подготовка отчета.
9. Защита отчета.
Примечание – на этапах 5–7 студент-оператор составляет протокол работы и делает необходимые скриншоты и фотографии для
включения в отчет.
2. Технические сведения и методические рекомендации
2.1. Состав симулятора
Симулятор является электромеханическим устройством, которое приводится в действие двумя электромоторами, управляемыми
встроенным компьютером с установленным на него специализированным программным обеспечением. Такая конструкция позволяет пользователю ощутить динамику полета и перегрузки.
Общий вид симулятора приведен на рис. 2.1.
Симулятор представляет собой бесфундаментную сборно-разборную конструкцию и состоит из следующих укрупненных узлов и
модулей (см. рис. 2.2, 2.3):
1 – неподвижное основание; 2 – вилка; 3 – кабина пилота; 4 –
мотор-редуктор с тормозом; 5 – система управления симулятором
15
Рис. 2.1. Симулятор Fly-Motion
3
7
2
4
5
8
1
Рис. 2.2. Устройство симулятора Fly-Motion
(джойстик, РУД, педали); 6 – ящик с электроникой; 7 – персональный компьютер (ПК); 8 – ящик с управляющим контроллером.
На рис. 2.4 показаны органы (кнопки) управления симулятором.
1. Кнопка красная – блокирующаяся кнопка экстренной остановки с полным обесточиванием, которая также является кнопкой
выключения основного модуля симулятора.
16
2
3
1
4
8
6
7
Рис. 2.3. Устройство симулятора Fly-Motion (продолжение)
2
3
4
1
Рис. 2.4. Кнопки включения/аварийной остановки
2. Кнопка зеленая – включения основного модуля, совмещенная
с кнопкой включения компьютера.
3. Блокирующаяся кнопка красная – экстренной остановки для
пользователя симулятором.
4. Кнопка зеленая – запуск игры.
17
2.2. Описание работы на симуляторе
2.2.1. Включение симулятора
Симулятор состоит из нескольких согласованных модулей. Все
они требуют отдельного включения и выключения в правильной последовательности во избежание возникновения ошибок.
Перед включением симулятора убедитесь, что в кресле нет пилота и посторонних предметов. ОБЯЗАТЕЛЬНО: застегните ремень
безопасности (так как в его пряжке находится датчик, блокирующий работу симулятора в случае размыкания), а также визуально
проверьте, что на ремне отсутствуют сильные потертости, пряжка
ремня не повреждена, гайки на болтах крепления ремня безопасности (4 шт.) туго закручены.
В случае возникновения посторонних шумов, ошибок во время
включения или калибровки симулятора, а также обнаружения проблем с ремнем безопасности, потертостей на нем или разрывов, немедленно обратитесь к преподавателю.
2.2.1.1. Включение основного модуля симулятора
На первом этапе необходимо включить основной модуль симулятора (питание силовой части). Для этого отожмите две красные
грибовидные кнопки (если они нажаты), повернув их механизм по
направлению стрелки (см. рис. 2.4). Первая кнопка (3) находится у ручки управления двигателем (РУД) слева от кресла пилота,
другая (1) находится слева на боковой панели ящика с электроникой. Затем нажмите зелёную кнопку (2), которая находится рядом
с красной грибовидной кнопкой симулятора (1). Должен прозвучать
характерный щелчок срабатывания контактора.
2.2.1.2. Включение компьютера внутри симулятора
На втором этапе включается игровой компьютер, находящийся
под кабиной пилота. Для этого нажмите еще раз зеленую кнопку (2)
на ящике с электроникой (см. рис.2.4).
2.2.1.3. Включение телевизора с акустической системой
Телевизор включается в соответствии с инструкцией. Кнопка
включения находится на телевизоре. На экране отобразится загрузка Windows, после чего симулятор автоматически перейдёт
в режим ожидания запуска игры. В режиме ожидания симулятор
может выводить статическую картинку на экран телевизора либо
заранее подготовленный видеофайл.
18
2.2.1.4. Включение управляющего планшета
Далее необходимо включить
планшет.
Планшет включается согласно
инструкции производителя планшета. Обычно это кнопка включения, которую нужно нажать и
подержать 1–3 сек до появления
экрана загрузки планшета, затем
запустить приложение PlatMotion.
После включения управляющей программы и загрузки основной системы (потребуется некоторое время для полной загрузки системы) нужно выбрать симулятор,
к которому производится подключение (см. рис. 2.5).
Соединение между управляющим планшетом и симулятором
происходит по беспроводной сети
Wi-Fi. Поэтому планшет должен
Рис. 2.5. Выбор симулятора
находиться в непосредственной
близости от симулятора, чтобы
сигнал был устойчивым. При неустойчивой работе Wi-Fi запуск
игры будет НЕВОЗМОЖЕН!
2.2.2. Подготовка к игре
После запуска программа PlatMotion попросит ввести PIN-код
(см. рис. 2.6). Поскольку он уже прописан в настройках, оператору
достаточно нажать “Принять”.
Если PIN-код введен верно, то управляющая программа попытается установить связь с симулятором. Соединение между управляющим планшетом и симулятором происходит по беспроводной сети
Wi-Fi.
После соединения управляющего компьютера с симулятором на
экране планшета появится приглашение к калибровке симулятора
(см. рис. 2.7).
Убедитесь, что рядом с симулятором никто не находится, ничего
не мешает его беспрепятственному движению, в кресле нет посто19
Рис. 2.6. Ввод ПИН-кода
Рис. 2.7. Запуск калибровки
ронних предметов. Нажмите «ОК» на планшете. Начнется калибровка.
На исправном симуляторе процесс калибровки заключается
в следующем: кабина пилота симулятора поворачивается в начальное (посадочное) положение, если оно не находится в таковом. Делается это один раз при включении симулятора, если не производить
дополнительное выключение\включение силовой части кнопками
(1) и (2) (см. рис 2.4).
Если поведение симулятора отличается от описанного выше (кабина пилота не встала в исходное для посадки положение, слышны
посторонние звуки при калибровке, есть подозрение на неправильное поведение симулятора и т.д.) или на планшете есть сообщение об
ошибке калибровки, то остановите симулятор аварийной кнопкой
(1) и позовите преподавателя.
Если симулятор прошёл калибровку без ошибок, то на экране планшета можно будет выбрать время игры, введя сумму (см.
рис. 2.8).
20
Рис. 2.8. Ввод суммы
Рис. 2.9. Выбор типа игры
После нажатия кнопки “Далее” на экране появится окно выбора режима игры. Изменить время игры после ее начала будет уже
нельзя.
2.2.3. Однопользовательская игра
2.2.3.1. Подготовительный этап
Для запуска однопользовательского режима необходимо выбрать опцию «Одиночный» при старте (см. рис. 2.9).
2.2.3.2. Выбор параметров и режима игры
Оператор с учетом пожеланий игрока и опыта его работы на симуляторе выбирает игру и ее параметры.
Список появляющихся экранов в правильной очерёдности такой:
– Выбор игры (см. рис. 2.10,а).
– Выбор миссии (см. рис. 2.10,б).
– Выбор режима работы (см. рис. 2.10,в).
21
а)
б)
в)
Рис. 2.10. Выбор игры (а), уровня (б) и режима (в) на планшете
После нажатия кнопки «ДАЛЬШЕ» игроку предлагают подготовиться к началу игры.
Рис. 2.11. Кресло игрока
22
2.2.3.3. Описание игры и органов управления самолетом
1) Игра «Крылатые хищники».
Суть игры – воздушный бой.
Вы летите на самолете Второй
мировой войны, вокруг вас несколько вражеских самолетов,
которые вы должны уничтожить.
Противники изображены на радаре в правом верхнем углу экрана
красными точками. При визуальном контакте с противником по
ним открывается стрельба.
2) Органы управления самолетом.
Рукоятка перед сидением пилота (джойстик) предназначен для
управления углом крена и тангажа самолета, стрельбы и пуска ракет (рис. 2.11, 2.12).
Стрельба
из пулемета
Смена вида
(из кабины, со стороны)
Тангаж (ручка от себя –
наклон вниз)
Крен
влево
Стрельба из пушек
Крен
вправо
Пуск ракет
Тангаж (ручка к себе –
наклон вверх)
Вращение джойстика
запрещено
Рис. 2.12. Джойстик
а)
б)
1
2
3
Рис. 2.13. Рукоятка управления тягой (а) и ее схема (б):
1 – Рукоятка управления тягой двигателя (не изображена на рисунке);
2 – Включить/выключить двигатель; 3 – Убрать/выпустить шасси
23
Рис. 2.14. Педали
Движения джойстика:
– влево или вправо (управление элеронами) – наклон самолета
влево или вправо (крен);
– к себе или от себя (управление рулем высоты) – самолет наклоняется и летит вверх или вниз (тангаж).
Для быстрого поворота самолета влево или вправо следует соответственно наклонить ручку и, удерживая постоянный крен, немного потянуть на себя.
Запрещается совершать джойстиком вращательные движения
вокруг оси рукоятки.
РУД (Рукоятка управления двигателем) используется для изменения тяги двигателя (см. рис. 2.13). Ручка от себя – максимальная
тяга двигателя, к себе – минимальная. Так же на панели РУД расположены различные кнопки и тумблеры для включения/выключения двигателя, управления шасси и т.п.
Педали предназначены для управления рулем направления, но
в данной версии они не используются (см. рис. 2.14). Нажимая левую или правую педаль, можно плавно поворачивать самолет влево
или вправо. В основном, они используются при взлете или посадке,
а также для совершения фигур высшего пилотажа и управления
в экстренных ситуациях, например, для выхода из штопора.
2.2.3.4. Посадка игрока в симулятор и запуск игры
Действия Оператора при запуске игры и посадке:
1. После появления приглашения к игре на планшете приступайте к подготовке ремня безопасности и посадке игрока;
24
2. Расстегните ремень безопасности, если он застегнут, удлините
плечевые лямки ремня, откиньте ремень на кресле в стороны;
3. Попросите игрока снять очки (если он их носит), кепку, шляпу
и другие головные уборы, в случае наличия длинных волос на голове убрать их под элементы одежды, а также вынуть из карманов все,
что может выпасть при переворотах кабины симулятора;
4. Помогите игроку сесть в кресло кабины симулятора;
5. Попросите игрока просунуть руки под ремень безопасности,
при необходимости помогите ему это сделать;
6. Попросите игрока максимально глубоко сесть в кресло и застегните на нем ремень;
7. Туго подтяните поясную часть ремня с двух сторон, чтобы
пряжка осталась по центру; при этом плечевые лямки должны
остаться свободными. Если они натянулись, то ослабьте их и заново
подтяните поясную часть ремня. Таким образом, сначала затягиваем поясную часть ремня, только потом уже плечевые лямки. Это
важно в целях безопасности!
8. Попросите игрока откинуться назад и плотно прислониться
спиной к креслу, туго затяните плечевые лямки ремня. ВАЖНО!
Плечевые лямки необходимо затягивать на игроке ровно, вдоль линии ремня, не дергая (при затягивании) лямку влево или вправо,
окончательно зафиксировав ремень резким рывком лямки вниз.
Это позволит избежать ослабления ремней в игре. Проверьте качество натяжения ремней! Если натяжение ремня ослабляется – нужно вернуть прижимной ролик с обратной стороны фиксирующего
элемента в ровное горизонтальное (неперекошенное) положение
относительно элемента фиксации и затянуть ремни еще раз, снова
убедившись, что ролик прижимается как нужно и не происходит
ослабления ремней.
9. Попросите игрока поставить ноги на педали и пристегните их
пряжками на липучках;
10. Подвиньте педали на удобное для игрока расстояние;
11. Проведите краткий инструктаж по управлению самолетом
в игре, покажите кнопку аварийной остановки и кнопку запуска
игры (см. информацию в Памятке Игрока);
12. Объясните, что запрещается совершать джойстиком вращательные движения вокруг оси рукоятки. Управлять джойстиком
можно только поступательными движениями (вперед-назад, влево-вправо) без приложения особых усилий. Несоблюдение данного
правила может повлечь поломку джойстика управления!
25
13. Окончательно убедитесь, что игрок готов к полету и только
после этого нажмите кнопку «НАЧАТЬ ИГРУ» на планшете. После
этого действия не приближайтесь к Симулятору, т.к. он может начать движение в любой момент;
14. Для запуска игры предложите игроку нажать зеленую кнопку «СТАРТ» (4) слева от кресла пилота (см. рис. 2.4). Ни в коем случае не делайте это сами!
15. Следите за игроком во время игры и будьте готовы экстренно
остановить игру.
2.2.3.5. Высадка игрока после окончания игры
После окончания игры пилот должен покинуть кресло симулятора только после полной остановки симулятора и корректного
завершения игры! Расстегните ремень безопасности, отстегните
пряжки на липучках на ногах игрока, помогите игроку покинуть
кабину симулятора.
2.2.3.6. Экстренная остановка и аварийная эвакуация
При сбое в работе симулятора или возникновении внештатной
ситуации следует немедленно остановить его, полностью обесточив
аварийной красной кнопкой СТОП (1) на ящике с электроникой (см.
рис. 2.4). После этого приступить к эвакуации игрока.
Если кабина симулятора находится не в горизонтальном положении, и покинуть ее самостоятельно игрок не может, то следует
перевести ее в исходную позицию. Это делается несколькими кратковременными нажатиями на ручку тормоза каждого двигателя
симулятора до полного возвращения кабины в исходное для посадки положение (см. рис. 2.15).
Рычаги тормоза двигателя
Рис. 2.15. Рычаги тормоза двигателя
26
Причем для выравнивания вилки симулятора в исходное положение необходимо воспользоваться тормозом двигателя вилки (на
рис. выше изображен справа). Затем уже выровнять кабину симулятора путем нажатия на рычаг тормоза двигателя кабины (на рис.
выше изображен слева).
ВНИМАНИЕ! При отпускании тормоза двигателя, расположенного на кабине симулятора, кабина начнет резко поворачиваться
под собственным весом. Ни в коем случае нельзя просовывать руку
между вилкой и рамой кабины, это может повлечь за собой серьезные травмы!
Будьте аккуратны при работе с тормозами двигателей! Берегите руки!
Наиболее опасное положение кабины при эвакуации изображено
на рис. 2.16.
После окончательного выравнивания кабины с помощью ручек
тормоза на двигателях игрок может расстегнуть ремень безопасности, липучки на ногах и покинуть кабину симулятора.
Если симулятор работает корректно, но возникла необходимость
быстрой остановки игры (например, игроку стало плохо) – это следует выполнить путем нажатия на кнопку «ЭКСТРЕН. СТОП» на
Н
ап
вр ра
а щ вл
ен ени
ия е
Аварийный
СТОП
Рис. 2.16. Меры предосторожности
27
экране стойки/планшета. При этом симулятор вернется в исходное
(посадочное) положение и игрок сможет покинуть кабину, расстегнув ремни безопасности и пряжки с липучками на ногах. При этом
Оператор должен всеми силами помочь игроку спуститься в случае,
когда последнему стало плохо. Тем самым предотвратив получение
травм посетителем симулятора.
Если произошел незначительный сбой в работе симулятора,
в результате которого игра остановилась (например, было кратковременное отключение электричества или “завис” компьютер), то
восстановить работу симулятора можно выключив и включив его
заново кнопками на ящике с электроникой (см. пункт «Включение
симулятора»). Прибегать в такой ситуации к аварийной эвакуации
не следует, так как кабину можно выровнять, проведя калибровку
вместе с игроком. После чего игрок должен будет либо начать игру
заново, либо покинуть кабину симулятора.
2.2.4. Выключение и перезапуск симулятора
Для выключения симулятора в правильной последовательности
требуется (см. рис. 4):
1) Нажать зелёную кнопку включения/выключения компьютера
симулятора (2) и дождаться его полного отключения;
2) Нажать кнопку выключения основного модуля симулятора (1),
отключив тем самым силовую часть симулятора, телевизор и акустическую систему.
3) Выключить планшет.
Перезапуск симулятора осуществляется путем выключения/
включения компьютера симулятора зелёной кнопкой (2).
Внимание! При перезапуске симулятора отключается Wi-Fi-модуль
и локальная сеть, в результате чего планшет теряет с ним связь. При
этом на экране может появиться ошибка потери связи с симулятором.
Подождите 1–2 минуты, пока связь не восстановится автоматически!
3. Техника безопасности игрока
Оператор перед посадкой игрока в кабину выдает ему для ознакомления Памятку Игрока и Правила безопасной эксплуатации симулятора (ламинированные листы А4).
4. Контрольные вопросы
1. Состав симулятора.
28
2. Органы управления симулятором.
3. Включение симулятора.
4. Подготовка к игре.
5. Выбор игры и ее параметров.
6. Органы управления самолетом.
7. Посадка игрока в симулятор и запуск игры.
8. Высадка игрока после окончания игры.
9. Экстренная остановка и аварийная эвакуация.
10. Выключение и перезапуск симулятора.
Рекомендуемая литература
1. Руководство оператора Fly-Motion. – СЭМЗ «Вымпел», 2016. 31
с.
2. Симулятор Fly-Motion. Технический паспорт изделия. – СЭМЗ
«Вымпел», 2016. 8 с.
29
Лабораторная работа № 3
Изучение работы кинотеатра 5D-Motion
Цель работы – изучение устройства кинотеатра, его включение
и выключение, режимов просмотра фильма, требований безопасности и овладение навыками оператора.
1. Порядок выполнения
Данная работа выполняется под наблюдением преподавателя
2–5 студентами – один в роли оператора, другие – зрители.
1. Изучение методических указаний.
2. Сдача коллоквиума.
3. Роспись в журнале техники безопасности.
4. Студент-оператор подготавливает кинотеатр к работе.
5. Студент-оператор обеспечивает инструктаж студентов-зрителей (от 1 до 4 человек); их посадку и высадку; зарядку, выдачу и
сбор очков; запуск и просмотр фильма; остановку платформы; технику безопасности.
6. Студент-оператор выключает кинотеатр.
7. Подготовка отчета.
8. Защита отчета.
Примечание – на этапах 4–6 студент-оператор составляет протокол работы и делает необходимые фотографии для включения в отчет.
2. Технические сведения и методические рекомендации
2.1. Состав кинотеатра 5D-Motion:
1) 3-x степенная платформа – неразборная бесфундаментная
металлическая рама на виброопорах с узлом гидропривода,
маслостанцией, электронным блоком, раздаточными рукавами
высокого давления и цилиндрами движения симулятора.
Верхняя подвижная часть платформы оснащена четырьмя
креслами
спортивного
образца
с усиленным
каркасом,
оборудованными поясными ремнями безопасности (см. рис. 3.1 и 3.2).
Трап – жесткая каркасная конструкция, служит для подъема и
размещения на платформе.
2) Система 3D визуализации – проектор с пультом управления,
экран и 3D очки (см. рис. 3.3).
30
Рис. 3.1. Платформа, вид спереди
Рис. 3.2. Платформа, вид сзади
Рис. 3.3. Проектор, пульт и 3D-очки
31
а)
б)
Рис. 3.4. Стойка управления (а)
и кнопки включения/аварийной остановки (б)
3) Стойка управления – ЖК монитор, связанный при помощи
кабеля VGA с системным блоком, содержащим компьютер, сетевой
интерфейс (встроенный), специализированное ПО.
Справа стойки расположены кнопки аварийного останова,
запуска источника бесперебойного питания и системного блока (см.
рис. 3.4,б).
4) Активный акустический комплект (см. рис. 3.5).
Рис. 3.5. Акустическая система
32
5) Спецэффекты:
– «Ветер» – радиальные вентиляторы, создающие мощный поток
воздуха, установлены под платформой. До каждого кресла воздух
подаётся по воздуховодам. Скорость потока воздуха регулируется
0 – 100% в зависимости от ситуации в фильме.
–  «Брызги воды» – емкость для воды со встроенным насосом,
устанавливается за креслами. На передней дуге установлены
форсунки для распыления воды.
–  «Молния» (светодиодный стробоскоп).
6) Фильмы.
2.2. Включение кинотеатра
2.2.1. Включение платформы (см. рис. 3.2):
1. Проверить подключение вилки питания платформы 220В и
вилки питания стойки управления 220В.
2. Отжать кнопку остановки платформы «СТОП» (1).
3. Нажать зелёную кнопку включения питания платформы
«ПУСК» (2).
4. Убедиться в наличии воды в бачке спецэффекта «БРЫЗГИ»,
при необходимости – долить.
2.2.2. Включение стойки управления (см. рис. 3.4,б).
1. Отжать аварийную кнопку.
2. Нажать красную кнопку (средняя) включения источника бесперебойного питания, если он не включен.
3. Нажать зеленую кнопку включения компьютера.
4. Вид экрана приведен на рис. 3.6.
Рис. 3.6. Рабочий стол Windows 7
33
2.2.3. Включение проектора и аудиосистемы
1. Включить проектор, используя дистанционный пульт управления.
2. На настенном экране должно появиться изображение.
3. Включить аудиосистему и настроить ее громкость.
2.2.4. Подготовка 3D-очков
1. Подключить очки по USB-кабелю к USB-гнездам на стойке
управления, которые находятся под столом (см. рис. 3.4,а).
2. Заряжать до исчезновения красного сигнала на очках.
Внимание!
1. Первый запуск производить без посетителей для заполнения
системы маслом, а также производить визуальный осмотр оборудования на предмет работоспособности всех систем.
2. Курсор мыши может находится как на экране монитора, так и
на настенном экране.
2.3. Порядок действия оператора при работе с кинотеатром
1. Убедиться, что гидравлическая платформа находится в горизонтальном положении.
2. Убедиться, что отжата аварийная кнопка на стойке управления (см. рис. 3.4,б).
3. Запустить на стойке управления 5DPlayer, после чего на экране появится окно с предложением выбрать фильм для просмотра
(см. рис. 3.7).
Рис. 3.7. Выбор фильмов
34
Рис. 3.8. Фильмотека
Если вы хотите просмотреть все фильмы, имеющиеся в медиатеке, то необходимо нажать кнопку «Все» (см. рис 3.7), после чего откроется список фильмов, приведенный на рис. 3.8.
4. Выбрать на стойке управления фильм, нажав на соответствующую пиктограмму фильма одним кликом левой кнопки мыши, и
дождаться запуска плеера для воспроизведения фильма (пример см.
на рис. 3.9).
Рис. 3.9. Запуск/остановка фильма
35
5. Пригласить зрителей в зал и помочь им занять свои места
в креслах, раздать очки и включить их.
6. Убедиться, что все зрители пристегнуты ремнями безопасности, и в «зоне безопасности» симулятора не находятся посторонние.
7. Нажать кнопку «
», совмещенную с кнопкой «Стоп» (см.
рис. 3.9), на мониторе стойки управления для начала просмотра
фильма.
8. Кинотеатр начнёт работу. Во время работы кинотеатра оператору категорически запрещается оставлять зрителей без присмотра!!!
9. После завершения фильма необходимо дождаться остановки
платформы, только после этого собрать очки и разрешить зрителям
покинуть свои места.
ВАЖНО!!! При длительном использовании кинотеатра необходимо следить за температурой масла и электродвигателя. В случае, если температура любого из этих компонентов превысит 75°С,
необходимо приостановить работу кинотеатра без обесточивания
всей системы, т. е. оставить платформу включенной при нажатой
аварийной кнопке. При этом вентиляторы на электродвигателе и
на маслостанции будут продолжать работать для охлаждения этих
компонентов. Следует дождаться автоматического выключения
вентилятора охлаждения радиатора маслостанции, убедиться, что
температура масла не более 65°С и только после этого продолжить
эксплуатацию в рабочем режиме.
2.4. Экстренная остановка
Если во время работы кинотеатра возникла экстренная необходимость остановить его работу, оператор должен:
1. Нажать кнопку аварийной остановки на стойке управления
(гидравлическая платформа остановится, сбросит давление).
2. Попросить зрителей покинуть кинотеатра, а при необходимости помочь им сделать это.
3. Отжать аварийную кнопку и нажать на мониторе стойки
управления кнопку «закрыть».
4. Дождаться перехода в меню выбора фильмов.
5. Симулятор снова готов к работе.
2.5. Аварийная кнопка на стойке управления
Аварийную кнопку на стойке управления следует использовать
только в случае экстренной необходимости остановить работу кино36
театра, а также в конце рабочего дня для выключения кинотеатра.
При этом необходимо соблюдать следующую последовательность:
1. нажать на экране стойки управления кнопку «Выключить»
(см. рис. 3.8, правый верхний угол);
2. нажать кнопку аварийной остановки на стойке управления;
3. в появившемся на экране стойки управления диалоговом окне
нажать «ДА», после чего стойка управления и компьютер будут выключены;
4. нажать кнопку выключения питания платформы «СТОП» (1)
(см. рис.3.2);
5. отжать кнопку аварийной остановки;
6. симулятор выключен.
2.6. Порядок выключения кинотеатра
1. Выключить платформу.
2. Выключить проектор и аудиосистему.
3. Выключить стойку управления.
4. Протереть и упаковать очки.
3. Контрольные вопросы
1. Состав кинотеатра.
2. Включение платформы.
3. Включение стойки управления.
4. Включение проектора и подготовка очков.
5. Порядок действия оператора при работе с кинотеатром.
6. Экстренная остановка.
7. Назначение аварийной кнопки.
8. Порядок выключения кинотеатра.
Рекомендуемая литература
1. Симулятор 5D-Motion. Технический паспорт изделия. Руководство по эксплуатации. – СЭМЗ «Вымпел», 2016. 10 с.
37
Лабораторная работа № 4
«Изучение работы на симуляторах
в многопользовательском режиме на платформе
Unity»
Цель работы – изучение работы в единой многопользовательской
трехмерной среде, созданной на движке Unity. Научиться создавать
хост и подключаться к сетевой игре с различных симуляторов. Это
групповая работа, и она рассчитана на выполнение как минимум
тремя студентами.
1. Порядок выполнения
Данная работа выполняется под наблюдением преподавателя
группой из 3–5 студентов. Один в роли оператора, остальные – игроки.
1) Изучить методические указания по симуляторам XD, FLY и
кинотеатру 5D.
2) Сдать коллоквиум.
3) Расписаться в журнале техники безопасности.
4) Включить два симулятора XD-Motion и управляющие планшеты.
5) Включить симулятор Fly-Motion.
6) Провести калибровку и убедиться, что механика всех симуляторов работает исправно.
7) Запустить многопользовательскую игру PlatMotionDemo на
базе Unity на первом XD-Motion.
8) Подключиться к игре со второго XD-Motion, Fly-Motion и
5D-Motion.
9) Сымитировать возникновение внештатной ситуации и аварийно остановить симуляторы.
10) Выключить симуляторы.
11) Подготовить отчет.
12) Защитить отчет.
Примечание: на этапах 7–9 студент-оператор составляет протокол работы и делает необходимые фотографии для включения в отчет.
2. Включение симуляторов, проверка и калибровка
Включение симуляторов XD-Motion, Fly-Motion и 5D-Motion проводится в соответствии с инструкциями в лабораторных работах 1,
2 и 3 соответственно.
38
Требуется выполнить следующие пункты:
1) Включение основного модуля симулятора XD-Motion;
2) Включение основного модуля симулятора Fly-Motion;
3) Включение основного модуля симулятора 5D-Motion;
4) Включение управляющего планшета (2 шт.);
Обратите внимание, если сначала на планшете выбрать FLY,
запустить игру, а затем сменить платформу на XD, игра прервется. Это происходит из-за ошибки в управляющем ПО, поэтому для
управления FLY необходимо использовать отдельный планшет. Менять платформу с XD1 на XD2 и наоборот можно без последствий.
5) Включение телевизора (2 шт. на XD);
6) Включение телевизора (на FLY);
7) Включение проектора и аудиосистемы (на 5D);
8) Ввод PIN-кода;
9) Запуск калибровки (последовательно для XD, FLY и 5D).
2.1. Запуск многопользовательской игры
Для работы сетевой игры все платформы должны находиться
в одной подсети. Если платформы объединены через сеть интернет,
то необходимо проложить туннели, обеспечив работу платформ так,
как если бы они находились в одной сети. Например, это можно сделать с помощью программы Hamachi. Все настройки (планшетов,
компьютеров, конфигурационных файлов) напрямую зависят от IPадресов. Это стоит учитывать при изменении конфигурации сети.
2.1.1. Запуск игры на XD-Motion 01/02 в роли сервера/клиента
Для запуска XD1 (у окна) в роли хоста после ввода суммы и проведения калибровки необходимо выбрать режим «Многопользовательский», игру «UniCarGame» и режим работы по желанию (см.
рис. 4.1).
XD1 (у окна) станет сервером, и теперь все остальные симуляторы будут подключаться к его игре.
Теперь так же точно запустите игру UniCarGame на втором XD (у
двери). Он станет клиентом и подключится к серверу. Два игрока на
машинах смогут увидеть друг друга в единой игровой среде.
2.1.2. Запуск игры на Fly-Motion в роли клиента
После ввода суммы и проведения калибровки необходимо выбрать режим «Многопользовательский», игру «UniCopterGame» и
режим работы по желанию (см. рис. 4.1).
39
а)
б)
в)
Рис. 4.1. Выбор сетевого режима (а), игры (б) и режима работы (в)
FLY станет клиентом и подключится к серверу на XD1. Игрок на
квадрокоптере сможет увидеть игроков на машинах в единой игровой среде.
2.1.3. Запуск игры на 5D-Motion в роли клиента
После ввода суммы и проведения калибровки необходимо выбрать режим «Многопользовательский», игру «UniTelegaGame» и
режим работы по желанию (см. рис. 4.1).
5D станет клиентом и подключится к серверу на XD1. Платформа представлена в трехмерной сцене в виде куба, движущегося по
рельсам. Управлять направлением или скоростью движения нельзя. Игроки на квадрокоптере и машинах смогут увидеть передвигающуюся платформу.
2.2. Аварийная остановка игры
Имитацию аварийной ситуации и остановку игры следует сперва
проводить на устройствах-клиентах, поскольку при аварийном отключении сервера игра прекратится сразу на всех задействованных
симуляторах.
1) Аварийно остановить XD2 (у двери) согласно инструкции в лабораторной работе 1.
40
2) Аварийно остановить FLY согласно инструкции в лабораторной работе 2.
3) Аварийно остановить 5D согласно инструкции в лабораторной
работе 3.
4) Аварийно остановить сервер XD1 (у окна) согласно инструкции в лабораторной работе 1.
2.3. Выключение симуляторов
Выключение XD, FLY, 5D, управляющих планшетов и управляющей консоли производится согласно инструкциям в лабораторных
работах 1–3.
3. Контрольные вопросы
1 Порядок включения симуляторов и управляющих планшетов.
2 Запуск многопользовательской игры.
3 Порядок подключиться к игре симуляторов со второго планшета.
4 Порядок завершения игры и выключения симуляторов.
Рекомендуемая литература
1) Руководство оператора XD-Motion. – СЭМЗ «Вымпел», 2016.,
25 стр.
2) Руководство оператора Fly-Motion. – СЭМЗ «Вымпел», 2016.,
31 стр.
3) Симулятор XD-Motion. Технический паспорт изделия. – СЭМЗ
«Вымпел», 2016., 8 стр.
4) Симулятор Fly-Motion. Технический паспорт изделия. – СЭМЗ
«Вымпел», 2016., 8 стр.
5) Симулятор 5D-Motion. Технический паспорт изделия. Руководство по эксплуатации. – СЭМЗ «Вымпел», 2016., 10 стр.
5. Требования к оформлению отчета
Отчет о лабораторной работе должен включать:
1. Титульный лист.
2. Цель работы.
3. Индивидуальное задание.
4. Описание процесса выполнения работы и полученные результаты с необходимыми комментариями (сценарии, фрагмен41
ты настроек программ, скриншоты экрана, фотографии и др.),
в т.ч.скриншоты из управляющей программы PlatMotion на планшете с индивидуальными настройками для запуска игры;
5. Выводы по результатам работы.
Примечание: Чтобы сделать скриншот на планшете необходимо
открыть верхнее выпадающее меню и нажать кнопку «Скриншот».
Сделанные снимки сохраняются в папку «Фото» в памяти планшета.
Титульный лист оформляется в соответствии с шаблоном (образцом), приведенным на сайте ГУАП (www.guap.ru) в разделе «Сектор
нормативной документации». Текстовые и графические материалы
оформляются в соответствии с действующими ГОСТами и требованиями, приведенными на сайте ГУАП (www.guap.ru) в разделе
«Сектор нормативной документации».
42
2. ПРОГРАММИРОВАНИЕ СИМУЛЯТОРОВ
Практическая работа № 1
Создание приложения для симулятора XD-Motion
Цель работы – изучение методики создания, модификации и
развертывания собственного приложения на движке Unity3D, которое будет задействовать аппаратные возможности симулятора XDMotion.
Порядок выполнения
1. Импорт ассетов и подготовка сцены
Создайте новый проект Unity и импортируйте ассеты Vehicles и
Environment. Скопируйте содержимое прилагающейся к руководству папки Assets в папку Assets вашего проекта. Здесь находится
всё, что необходимо для взаимодействия с XD-Motion:
– В папке StreamingAssets находится файл конфигурации, в котором хранятся IP-адреса симуляторов и настройки по умолчанию,
применяемые, когда приложение запускается без аргументов командной строки.
– В папке Scripts находятся C#-скрипты, обеспечивающие взаимодействие с XD-Motion.
В сцене должны присутствовать объекты Direction Light и Main
Camera. Если в вашей версии Unity их нет, добавьте их на сцену.
Затем добавьте на сцену объект Terrain (местность) и наложите
на него текстуру (например, травы). Это необходимо для того, чтобы
во время тестирования приложения было проще определить, двигается автомобиль или нет.
Добавьте на сцену префаб \Standard Assets\Vehicles\Car\Prefabs\
Car.prefab Сделайте присутствующую в сцене камеру Main Camera
дочерним объектом Car (можно просто перетащить Main Camera
в Car) и расположите её так, чтобы получился вид от первого лица
(рис. 5.1).
Добавьте к объекту Car скрипт \Scripts\Network\Net_
SendGameData.cs. В его поле Platform Type нужно указать XD
Motion. Этот скрипт отвечает за передачу данных из компонента
Transform машины приложению SimServer, которое, используя эти
данные, управляет «ногами» симулятора.
43
Рис. 5.1. Сцена с ландшафтом местности и автомобилем: вид из камеры
2. Настройка управления
Теперь необходимо настроить управление. Для этого в Unity используются оси ввода, позволяющие считывать сигналы с устройств
ввода: клавиатуры, мыши и аналоговых устройств вроде руля или
джойстика. Соответственно, есть три типа осей: «Joystick Axis»
(аналоговые устройства), «Key or Mouse Button» (кнопки клавиатуры и мыши) и «Mouse Movement» (движения мыши). Для каждого
действия обычно настраиваются по две оси ввода: одна для аналоговых устройств, вторая для клавиатуры и мыши, чтобы пользователь мог пользоваться тем устройством ввода, которое ему удобнее.
У XD-Motion есть три аналоговых устройства ввода: руль, педаль
газа и педаль тормоза. При этом в Unity есть стандартные оси ввода
«Horizontal» и «Vertical», которые обычно управляют поворотом машины и её скоростью соответственно, и мы будем их использовать.
Однако, поскольку у XD Motion скоростью управляют две педали
(две оси ввода), для передачи сигнала с педали газа будет настроена
ось «Vertical», а для передачи сигнала с педали тормоза будут созданы две оси «Brake». Одна ось будет предназначена для считывания
сигнала с клавиатуры, а вторая – с педали тормоза. Обратите внима44
ние, что оси «Horizontal» и «Vertical»
также представлены в двух экземплярах, однако мы будем настраивать только те, которые считывают
сигнал с аналоговых устройств.
Откройте InputManager (Edit>Project Settings->Input). Увеличьте
число осей на 2 и нажмите Enter. Это
добавит вниз списка две новые оси.
Переименуйте новые оси в «Brake».
При свёрнутых осях картина будет
выглядеть примерно как на рис. 5.2
(зелёным подчёркнуты оси, считывающие сигнал с клавиатуры, синим –
с аналоговых устройств вроде руля и
педалей):
Рис. 5.2. Окно с настройками
управления
Рис. 5.3. Задание органов управления
45
Удалите из осей Brake все установленные там кнопки, если они есть
(все Positive и Negative Button). После этого установите у одной из них
параметр Type в значение «Joystick
Axis», а параметр Axis – в «4th
axis». У второй оси установите параметр Type в значение «Key or Mouse
Button», а параметру Negative Button
задайте значение «s» (рис. 5.3).
У оси «Horizontal», отвечающей
Рис. 5.4. Редактирование скрипта за аналоговый ввод, нужно устано-
Рис. 5.5. Код скрипта после внесенных изменений
вить Axis в «X axis», а у Vertical – в «3rd axis».
Префаб Car использует одну ось для газа и тормоза, но у нас газ и
тормоз – это две разные оси. Чтобы префаб получал корректные значения, нужно отредактировать скрипт CarUserControl.cs (рис. 5.4).
Он считывает значения с осей ввода и передаёт их в CarController.
В функции FixedUpdate() перед #if !MOBILE_INPUT допишите
строку:
float b = CrossPlatformInputManager.GetAxis(“Brake”);
Затем поменяйте третий аргумент функции m_Car.Move с «v» на
«b». В итоге должен получиться код как на рис. 5.5:
4. Проверка работы приложения в Unity
Сохраните скрипт, сцену и проект. Сохраните объект Car как
префаб. Для этого выделите его и выберите Assets->Export Package.
46
Рис. 5.6. Запуск сцены в редакторе Unity
Рис. 5.7. Параметры сборки проекта
47
Он вам понадобится в дальнейшем для создания многопользовательской сцены.
Проверьте корректность работы созданного приложения в редакторе Unity. Для запуска приложения в режиме сервера нужно будет
нажать кнопку «LAN Host» (рис. 5.6).
5. Сборка и публикация приложения на XD-Motion
Далее соберём получившееся приложение (File -> Build Settings,
рис. 5.7). Учтите, что для публикации полученного приложения на
симуляторах XD-Motion скомпилированный .exe-файл должен называться PlatMotionGame.
После этого остаётся протестировать работу приложения непосредственно на симуляторе. Для этого нужно включить и запустить
XD-Motion согласно инструкции и перенести на него приложение
при помощи программы PlatMotionManager (см. Приложение П1 –
методика обновления моделей на симуляторах).
Убедимся, что игрок может управлять автомобилем, и механика
симулятора реагирует на перемещение автомобиля по сцене.
48
Практическая работа № 2
«Создание приложения для симулятора Fly-Motion»
Цель работы – изучение методики создания, модификации и
развертывания собственного приложения на движке Unity3D, которое будет обладать многопользовательским режимом и задействовать аппаратные возможности симулятора Fly-Motion.
Порядок выполнения
1. Импорт ассетов и подготовка сцены
Создайте новый проект Unity и импортируйте ассет Vehicles. Скопируйте содержимое прилагающейся к руководству папки Assets
в папку Assets вашего проекта. Здесь находится всё, что необходимо для взаимодействия с Fly Motion:
– В папке StreamingAssets находится файл конфигурации, в котором хранятся IP-адреса симуляторов и настройки по умолчанию,
применяемые, когда приложение запускается без аргументов командной строки.
– В папке Scripts находятся C#-скрипты, обеспечивающие взаимодействие с Fly-Motion.
Добавьте на сцену объект Plane (плоскость), задайте его Position
Y равной «1000», а Scale X и Scale Z равными «20000». Такие на-
Рис. 6.1. Импорт самолета и создание плоскости: вид из камеры
49
стройки предоставят самолёту достаточно большое пространство
для полётов. Наложите на Plane большую текстуру с подходящим
тайлингом (например, снимок со спутника). Это необходимо для
того, чтобы во время тестирования приложения было проще определить, двигается самолёт или нет.
Добавьте на сцену префаб \Standard Assets\Vehicles\Aircraft\
Prefabs\AircraftJet.prefab и установите его Position в {0, 0, 0}. Сделайте присутствующую в сцене камеру Main Camera дочерним
объектом AircraftJet (можно просто перетащить Main Camera
в AircraftJet) и расположите её так, чтобы получился вид от первого
лица (рис. 6.1). Установите Clipping Planes: Far в «70000». Это нужно, чтобы плоскость отображалась примерно до линии горизонта.
Добавьте к объекту AircraftJet скрипт \Scripts\Network\Net_
SendGameData.cs. В его поле Platform Type нужно указать Fly
Motion. Этот скрипт отвечает за передачу данных из компонента
Transform машины приложению SimServer, которое, используя эти
данные, управляет положением кабины.
2. Настройка управления
Теперь необходимо настроить управление. Для этого в Unity используются оси ввода, позволяющие считывать сигналы с устройств
ввода: клавиатуры, мыши и аналоговых устройств, вроде руля или
джойстика. Соответственно, есть три типа осей: «Joystick Axis»
(аналоговые устройства), «Key or Mouse Button» (кнопки клавиатуры и мыши) и «Mouse Movement» (движения мыши). Для каждого
действия обычно настраиваются по две оси ввода: одна для аналоговых устройств, вторая для клавиатуры и мыши, чтобы пользователь мог пользоваться тем устройством ввода, которое ему удобнее.
У Fly-Motion есть три устройства ввода: джойстик, панель с рычагом управления двигателем (РУД) и педали рысканья. Нас интересуют в первую очередь аналоговые оси джойстика и РУД, т.к. педали рысканья в Unity работают некорректно. Поэтому нужно будет
настроить три аналоговые оси (две для джойстика, одна для РУД) и
три кнопочные оси, чтобы осталась возможность управлять самолётом с клавиатуры.
Откройте InputManager (Edit->Project Settings->Input). Увеличьте число осей на 6 и нажмите Enter. Это добавит вниз списка шесть
новых осей. Назовите каждые две оси Pitch, Roll и Thrust (тангаж,
крен и тяга соответственно). При свёрнутых осях картина будет выглядеть примерно как на рис. 6.2.
50
Рис. 6.2. Настройка осей управления
Установите для аналоговых осей Type в Joystick Axis и удалите все кнопки (Positive и Negative Buttons), если они есть. (рис. 6.3)
Для оси Pitch установите Axis в «Y axis», а Joy Num – в «Joystick 3».
Для оси Roll установите Axis в «X axis», а Joy Num – в «Joystick 3».
Для оси Thrust установите Axis в «3rd axis», а Joy Num – в «Joystick
2». Обратите внимание на параметры Gravity, Dead и Sensivity: они
должны быть установлены в 0, 0.19 и 1.
Управление с клавиатуры можно настроить по своему вкусу: задайте Positive и Negative Buttons. Обычно за тангаж отвечают кнопки «W» и «S», за крен – «A» и «D», а тягу можно вводить с помощью
«Alt» и «Ctrl». При этом у всех кнопочных осей Type должен быть
выставлен в «Key or Mouse Button».
Откройте для редактирования скрипт AeroplaneUserControl2
Axis.cs (рис. 6.4). Он считывает значения с осей ввода и передаёт их
в контроллер самолёта.
51
Рис. 6.3. Назначение органов управления для джойстика и клавиатуры
52
Рис. 6.4. Редактирование скрипта ввода
Рис. 6.5. Код скрипта ввода после редактирования
В функции FixedUpdate() поменяйте названия осей для roll и
pitch на «Roll» и «Pitch» соответственно и по аналогии добавьте
считывание значения с оси Thrust. Замените в функции Move() параметр throttle на «thrust», переменную throttle при этом можно
удалить. Параметр pitch также должен быть со знаком «-» (минус).
В итоге должен получиться код как на рис. 6.5:
4. Проверка работы приложения в Unity
Сохраните скрипт, сцену и проект. Сохраните объект AircraftJet
как префаб. Для этого выделите его и выберите Assets->Export
Package. Он вам понадобится в дальнейшем для создания многопользовательской сцены.
Проверьте корректность работы созданного приложения в редакторе Unity. Для запуска приложения в режиме сервера нужно будет
нажать кнопку «LAN Host» (рис. 6.6).
53
Рис. 6.6. Запуск сцены в редакторе Unity
5. Сборка и публикация приложения на Fly-Motion
Далее соберём получившееся приложение (File -> Build Settings,
рис. 6.7). Учтите, что для публикации полученного приложения на
Рис. 6.7. Параметры сборки проекта
54
симуляторе Fly-Motion скомпилированный .exe-файл должен называться PlatMotionGame.
После этого остаётся протестировать работу приложения непосредственно на симуляторе. Для этого нужно включить и запустить
Fly-Motion согласно инструкции и перенести на него приложение
при помощи программы PlatMotionManager (см. Приложение П1 –
методика обновления моделей на симуляторах).
Убедимся, что игрок может управлять самолетом, и моторы симулятора реагируют на изменение крена и тангажа самолета в сцене.
Примечание:
В дальнейшей разработке вам может потребоваться узнавать
значения аналоговых осей и кнопок джойстика или панели с РУД.
Это можно сделать перед запуском приложения на вкладке Input,
если в Input Manager были заранее подготовлены соответствующие
оси ввода.
Кроме того, есть возможность запустить ваше приложение через исполняемый файл как обычную программу, минуя приложение PlatMotion на планшете. Поскольку SimServer’у не поступит
команда с планшета о начале игры, он не будет принимать данные
с вашего приложения и симулятор будет стоять спокойно, что сильно повышает удобство отладки устройств ввода. При этом на время
отладки необходимо принять все необходимые для обычной игры
на Fly-Motion меры предосторожности, а также отключить скрипт
Net_SendGameData.cs во всём проекте, чтобы исключить вероятность поступления данных о положении самолёта на SimServer!
55
Практическая работа № 3
Создание приложения для кинотеатра 5D-Motion
Цель работы – изучение методики создания, модификации и
развертывания собственного приложения на движке Unity3D, которое будет обладать многопользовательским режимом и задействовать аппаратные возможности кинотеатра 5D-Motion.
Порядок выполнения
1. Импорт ассетов и подготовка сцены
Создайте новый проект. Скопируйте содержимое прилагающейся к руководству папки Assets в папку Assets вашего проекта. Здесь
находится всё, что необходимо для взаимодействия с 5D-Motion:
– В папке StreamingAssets находится файл конфигурации, в котором хранятся IP-адреса симуляторов и настройки по умолчанию,
применяемые, когда приложение запускается без аргументов командной строки.
– В папке Scripts находятся C#-скрипты, обеспечивающие взаимодействие с 5D-Motion.
В сцене должны присутствовать объекты Direction Light и Main
Camera. Если в вашей версии Unity их нет, добавьте их на сцену.
Добавьте на сцену объект Terrain (местность) и наложите на него
любую текстуру.
Создайте пустой GameObject и назовите его RollerCoasterCar.
Сделайте Main Camera его дочерним объектом (можно просто перетащить Main Camera в RollerCoasterCar). Расположите
RollerCoasterCar над поверхностью Terrain (рис. 7.1):
Добавьте к объекту main Camera скрипт \Scripts\Network\Net_
SendGameData.cs. В его поле Platform Type нужно указать «Five D
Motion». Этот скрипт отвечает за передачу данных из компонента
Transform камеры приложению SimServer, которое управляет положением кабины с использованием этих данных.
2. Добавление анимации камеры
Выберите Window->Animation. Откроется вкладка создания
анимации, её можно расположить там, где вам удобно. Выделите камеру Main Camera и нажмите кнопку Create на вкладке Animation.
Сохраните новую анимацию под названием CameraAnimation. При
этом создаются два файла: контроллер анимации «Main Camera.
controller» и анимация «CameraAnimation.anim». Анимация будет
56
Рис. 7.1. Подготовка сцены, добавление местности
цикличной, потому что при её создании автоматически устанавливается галка «Loop Time» (зациклить время). К Main Camera автоматически добавился объект Animator, в поле Controller которого
указан контроллер Main Camera (рис. 7.2).
Рис. 7.2. Установка камеры
57
Рис. 7.3. Добавление свойств камеры
Теперь при выборе Main Camera вы будете видеть на вкладке
Animation интерфейс для создания анимации: список свойств, подверженных изменению, и линию времени, на которой будут задаваться ключевые точки анимации.
Вы можете масштабировать линию времени с помощью комбинации «Ctrl + колесико мыши». Сделайте её длину равной примерно 30 секундам. Добавьте два свойства из компонента Transform:
Position и Rotation. Для этого нажмите на кнопку «Add Property» и
нажмите на плюс рядом с нужным свойством (рис. 7.3).
Создайте ключевую точку по нажатию кнопки Add KeyFrame
(выделена красным на рис 7.4). Это начальное положение камеры.
С помощью красной черты на линии времени выберите момент,
когда камера должна прийти в следующее положение, и создай-
Рис. 7.4. Задание ключевых точек
58
те ещё одну ключевую точку. Затем переместите камеру в игровом пространстве и поверните её. Теперь камера будет стремиться
из начального положения в указанное вами за заданный на ленте
времени период. Обратите внимание, что чем быстрее камера будет
двигаться, тем более резкими и заметными будут движения платформы симулятора.
Таким образом вы можете создать несколько ключевых точек.
Проследите, чтобы в последней ключевой точке позиция и ориентация камеры были такими же, как и в начале анимации, тогда в зацикленной анимации не будет резких скачков при движении камеры,
и, соответственно, не будет излишне резких движений платформы.
Проверьте, что движения камеры корректны: на панели воспроизведения анимации нажмите кнопку «Play the animation clip»
(проиграть анимационный клип).
4. Проверка работы приложения в Unity
Сохраните скрипт, сцену и проект. Сохраните объект
RollerCoasterCar как префаб. Для этого выделите его и выберите
Assets->Export Package. Он вам понадобится в дальнейшем для создания многопользовательской сцены.
Проверьте корректность работы созданного приложения в редакторе Unity. Для запуска приложения в режиме сервера нужно будет
нажать кнопку «LAN Host» (рис. 7.5).
Рис. 7.5. Запуск сцены в редакторе Unity
59
Рис. 7.6. Параметры сборки проекта
5. Сборка и публикация приложения на 5D-Motion
Далее соберём получившееся приложение (File -> Build Settings,
рис. 7.6). Учтите, что для публикации полученного приложения на
симуляторах XD-Motion скомпилированный .exe-файл должен называться PlatMotionGame.
После этого остаётся протестировать работу приложения непосредственно на платформе. Для этого нужно включить и запустить
5D-Motion согласно инструкции и перенести на нее приложение при
помощи программы PlatMotionManager (см. Приложение П1 – методика обновления моделей на симуляторах).
Убедимся, что тележка движется по сцене, и гидравлические моторы кинотеатра повторяют наклоны и повороты камеры.
60
Практическая работа № 4
Создание многопользовательского приложения
для работы на симуляторах
Цель работы – изучение методики создания, модификации и
развертывания собственного многопользовательского приложения
на движке Unity3D, которое объединит в одной сцене симуляторы
XD-Motion и Fly-Motion с кинотеатром 5D-Motion.
Порядок выполнения
1. Импорт ассетов и подготовка сцены
Создайте новый проект Unity и импортируйте ассеты Vehicles и
Environment. Скопируйте содержимое прилагающейся к руководству папки Assets в папку Assets вашего проекта. Здесь находится
всё, что необходимо для взаимодействия с симуляторами:
– В папке StreamingAssets находится файл конфигурации, в котором хранятся IP-адреса симуляторов и настройки по умолчанию,
применяемые, когда приложение запускается без аргументов командной строки.
– В папке Scripts находятся C#-скрипты, обеспечивающие взаимодействие с симуляторами и другим.
В сцене должны присутствовать объекты Direction Light и Main
Camera. Если в вашей версии Unity их нет, добавьте их на сцену.
Затем добавьте на сцену объект Terrain (местность) и наложите
на него текстуру, например, травы. Это необходимо для того, чтобы
во время тестирования приложения было проще определить, двигаются ли автомобиль, самолет и платформа или нет. Увеличьте
Width и Length до 5000. Это нужно, чтобы предоставить самолёту
достаточное пространство для манёвров.
2. Подготовка префаба для XD-Motion
Выполните руководство по созданию приложения для платформы XD-Motion в режиме оффлайн. Сохраните объект Car как префаб. Выделите его и выберите Assets->Export Package (рис. 8.1).
Нажмите Export и сохраните файл под именем Car. Затем откройте проект, в котором вы делаете онлайн-игру, и импортируйте
этот файл через Assets->Import Package->Custom Package. При этом
проследите, чтобы не происходила перезапись скриптов. Затем настройте оси ввода согласно руководству по созданию приложения
для платформы XD-Motion.
61
Рис. 8.1. Экспорт пакета автомобиля
В сетевом режиме в сцене каждого пользователя находятся несколько префабов, управляемых разными пользователями. При
этом один из них должен реагировать на ввод локального пользователя, а остальные должны лишь синхронизировать своё местоположение с локальными объектами в сценах других пользователей.
Car Controller не предназначен для сетевой игры, он не учитывает,
что машиной может управлять не локальный пользователь, и если
использовать машину из руководства по созданию локального приложения как она есть, симулятор будет вести себя некорректно.
Например, может получиться так, что пользователь начнёт управлять не своей машиной, или будет управлять своей, но смотреть
на сцену через камеру другого пользователя. А поскольку скрипт
Net_SendGameData.cs также написан без учёта сетевого взаимодействия, симулятор будет вести себя неадекватно, например, его может очень сильно трясти.
62
Чтобы избежать этой ситуации, можно заранее выключить все
реагирующие на ввод пользователя компоненты машины, а при
размещении машины в сцене включать их только для локального
пользователя. Для этого предназначен скрипт \Scripts\Network\
Net_ActivateComponents.cs
Выключите компоненты Car Controller, Car User Control, Car
Audio и Net_SendGameData у префаба Car (рис. 8.2), а также компоненты Camera и AudioListener у его дочернего объекта Main Camera.
Рис. 8.2. Выключение компонентов машины
63
Рис. 8.3. Добавление сетевых компонентов автомобиля
Добавьте к машине компоненты Network Identity, Network
Transform и скрипт \Scripts\Network\Net_ActivateComponents.cs
(рис. 8.3). Установите галку «Local Player Authority» у компонента
Network Identity. Затем у компонента Network Transform установите параметр Network Send Rate равным 29, а Transform Sync Mode
в положение Sync Transform. Первый позволит обновлять положение машины 29 раз в секунду, а второй – синхронизировать лишь
положение и ориентацию (т. е. компонент Transform).
3. Подготовка префаба для Fly-Motion
Выполните руководство по созданию приложения для платформы Fly-Motion. Сохраните объект AircraftJet как префаб. Выделите
его и выберите Assets->Export Package (рис. 8.4).
Нажмите Export и сохраните файл под именем AircraftJet. Затем откройте проект, в котором вы делаете онлайн-игру, и импортируйте этот файл через Assets->Import Package->Custom Package.
При этом проследите, чтобы не происходила перезапись скриптов.
64
Рис. 8.4. Экспорт пакета самолета
Затем настройте оси ввода согласно руководству по созданию приложения для платформы Fly-Motion.
Точно так же, как и в случае с префабом XD-Motion, нужно выключить все реагирующие на ввод пользователя компоненты самолёта, и включать их только для локального пользователя.
Выключите компоненты Aeroplane Controller, Aeroplane User
Control 2 Axis, Aeroplane Control Surface Animator, Aeroplane
Audio, Object Resetter, Landing Gear и Net_SendGameData у префаба AircraftJet, а также компоненты Camera и AudioListener у его
дочернего объекта Main Camera (рис. 8.5).
Добавьте к самолёту компоненты Network Identity, Network
Transform и скрипт \Scripts\Network\Net_ActivateComponents.cs
(рис. 8.6). Установите галку «Local Player Authority» у компонента
Network Identity. Затем у компонента Network Transform установите параметр Network Send Rate равным 29, а Transform Sync Mode
в положение Sync Transform. Первый позволит обновлять положе65
Рис. 8.6. Добавление сетевых
компонентов для самолета
Рис. 8.5. Выключение сетевых
компонентов
ние самолёта 29 раз в секунду, а второй – синхронизировать лишь
положение и ориентацию (т. е. компонент Transform).
4. Подготовка префаба для 5D-Motion
Выполните руководство по созданию локального приложения
для платформы 5D-Motion. Сохраните объект RollerCoasterCar как
префаб. Выделите его и выберите Assets->Export Package (рис. 8.7).
66
Рис. 8.7. Экспорт пакета для платформы
Нажмите Export и сохраните файл под именем RollerCoasterCar.
Затем откройте проект, в котором
вы делаете онлайн-игру, и импортируйте этот файл через Assets>Import Package->Custom Package.
При этом проследите, чтобы не происходила перезапись скриптов.
Так же, как и в случае с машиной и самолётом, добавьте
к префабу компоненты Network
Identity, Network Transform и
скрипт
\Scripts\Network\Net_
ActivateComponents.cs (рис. 8.8)
Установите галку “Local Player
Authority” у компонента Network
Identity. Затем у компонента
Network Transform установите параметр Network Send Rate равным
29, а Transform Sync Mode в положение Sync Transform.
Рис. 8.8. Добавление сетевых
Выключите
компоненкомпонентов платформы
ты
Animator,
Camera,
Net_
67
Рис. 8.9. Выключение компонентов и добавление камеры
SendGameData и AudioListener у дочернего объекта префаба Main
Camera (рис. 8.9).
5. Настройка сетевого взаимодействия
Создайте пустой GameObject c именем SpawnPoints. Внутри него
создайте три пустых GameObject’а с именами «XD Start Position»,
«Fly Start Position» и «5D Start Position». Расположите эти три объекта на сцене в тех местах, где планируется появление соответствующих префабов и добавьте к ним компонент NetworkStartPosition.
Создайте пустой GameObject и назовите его NetworkManager
(рис. 8.10). Добавьте к нему скрипт Net_CustomManager.cs. В Prefab
Settings укажите соответствующие префабы, а в Spawn Points – соответствующие объекты Start Position.
Соберите приложение и проверьте его работоспособность в сетевом режиме. Для этого скопируйте собранное приложение в три
разные папки, и в каждой отредактируйте файл PlatMotionGame_
Data\StreamingAssets\ PM_config.xml, выставив разные значения
параметра PlatformType. Запустите три экземпляра приложения,
проверьте, чтобы сетевой режим работал корректно.
68
Рис. 8.10. Настройка позиций появления
Рис. 8.11. IP-адреса симуляторов
После этого запишите в конфигурационные файлы IP адреса симуляторов по образцу. (рис. 8.11)Можно указать неограниченное количество адресов, надо лишь менять номер в теге.
Проверьте работоспособность на симуляторах в соответствии
с методикой обновления ПО на симуляторе. Будьте внимательны: перед запуском приложения на симуляторе убедитесь, что
PlatformType в конфигурационном файле указан верно.
69
ПРИМЕРЫ ПРИЛОЖЕНИЙ
2.1. Приложение «Shame Rocc»
1. Запуск игрового приложения «Shame Rocc»
1) Положить приложение в директорию приложений для Unity
в соответствии с инструкцией по обновлению игр на симуляторах
(см. Приложение П1).
2)
Отредактировать
файл
PlatMotionGame_Data\
StreamingAssets\config.xml: указать режим игры по умолчанию,
платформу, на которой запускается игра и данные для сети. Файл
имеет следующий вид:
Рис. 9.1. Конфигурационный файл PlatMotionGame
70
Здесь приведена конфигурация, актуальная на апрель 2018 года.
Для параметров GameMode и PlatformType в комментариях указаны все возможные значения. Значения должны быть в точности такими, как они указаны. Например, нельзя написать 5D-Motion вместо FiveDMotion.
Количество серверов игры, адреса которых можно указать, не
ограничено. Например, к файлу выше можно дописать и Server8, и
Server9, и Server10, или удалить ненужные сервера.
3) Запустить игру как обычное приложение Unity для симуляторов в соответствии с инструкцией по обновлению, где написано, как
это делается.
2. Особенности работы приложения
– При запуске игры через SimServer, то есть в обычном режиме
в соответствии с инструкцией, параметры GameMode и PlatformType
указываются через SimServer с помощью планшета, а значения
из конфигурационного файла игнорируются. То есть каждый раз
при смене режима игры редактировать файл не нужно. Например, если в файле конфигурации написано: <GameMode>Offline</
GameMode>, а на планшете указали мультиплеер, то запустится
многопользовательский режим. Но при этом конфигурационный
файл всё равно проверяется на корректность и, если там были указаны неверные параметры, игра не запустится.
– При запуске игры в многопользовательском режиме первый
запущенный экземпляр игры становится сервером, независимо от
того, на каком симуляторе он был запущен. Все остальные экземпляры подключаются к нему. Чтобы это было возможно, в конфигурационном файле должен быть указан IP этого симулятора, как
на приведенной выше конфигурации (рис. 9.1, параметры Server).
Когда сервер выключается, запущенная на клиентах игра останавливается.
3. Решение проблем
– Игра запускается и зависает, показывая чёрный экран, или же
сама закрывается после запуска.
В этом случае нужно проверить файл %USERPROFILE%\
AppData\LocalLow\SUAICGLab\SHAME_ROCC\output_log.txt Там
может содержаться информация об ошибке. Это может быть неверный конфигурационный файл или же попытка запустить несколько экземпляров игры в одиночном режиме на одном компьютере.
– Игра не подключается к другой запущенной игре.
71
В этой ситуации в первую очередь надо проверить конфигурационный файл. В нём должен быть указан корректный IP-адрес сервера. Затем следует проверить сетевое соединение и настройки брандмауэра: возможно что-то блокирует попытки игры подключиться
к серверу.
– Игра некоторое время работала нормально, затем зависла.
Это указывает на то, что сервер игры был остановлен. В этом случае продолжение игрового процесса невозможно, нужно перезапустить игру.
– Игра запускается с некорректными настройками графики или
некорректным управлением.
В этом случае нужно открыть окно конфигурации и поправить
настройки игры на корректные. Это можно сделать, запустив exeфайл игры при зажатой кнопке Shift.
– Игрок застрял и никак не может выбраться.
По нажатию клавиши R он будет телепортирован в точку изначального размещения.
– Возникла ошибка, которая здесь не описана.
Нужно проверить файл %USERPROFILE%\AppData\LocalLow\
SUAICGLab\SHAME_ROCC\output_log.txt, скорее всего там содержится информация, которая может помочь при исправлении ошибки. Если было установлено, что ошибка вызвана внутренней логикой программы, нужно взять исходные коды приложения у преподавателя, а затем локализовать и исправить ошибку.
2.2. Приложение Unity City
Для запуска приложения Unity
City на любом из трех симуляторов необходимо выбрать пункт UniCarGame
для XD-Motion, UniCopterGame для
Fly-Motion и UniTelegaGame для
5D-Motion.
72
3. ОБЩИЕ ТРЕБОВАНИЯ ТЕХНИКИ БЕЗОПАСНОСТИ
Эксплуатант обязан соблюдать приведенные ниже требования
техники безопасности:
1. Как при установке, так и в режиме эксплуатации необходимо
строго следовать соответствующим нормам и правилам:
– Симуляторы содержат электронные компоненты и требует
осторожного обращения при транспортировке, складировании и
эксплуатации. Они должен устанавливаться в сухих помещениях,
защищенных от воздействия внешней среды.
– При осуществлении монтажа\демонтажа и обслуживания оборудования Симуляторов всегда следует использовать надежное безопасное оборудование (подвесные системы для работы на высоте,
твердые шлемы и др.). Все ремонтные работы должны выполняться
квалифицированным персоналом, имеющим необходимые документы по ТБ (допуск к работе в электроустановках и т.д.), способным оценивать назначение отдельных элементов конструкции и их
возможные перемещения.
2. Эксплуатант обязан разместить Правила безопасной эксплуатации Симуляторов на доступном для обозрения месте.
3. Администрация обязана обеспечить безопасную эксплуатацию Симуляторов согласно ГОСТ Р 53130-2008 и иных требований
законодательства.
4. Периодичность Технического обслуживания и состав работ
устанавливаются в соответствии с ГОСТ 20831-75 и прилагаемыми
Паспортами.
5. Обслуживание Симуляторов производится Оператором, не
моложе 18 лет, изучившим их устройство и принцип работы, знающим правила эксплуатации и меры безопасности.
6. Организацию эксплуатации и производство работ на Симуляторах следует проводить в соответствии с утвержденными действующими правилами и нормативными документами:
– В области охраны труда,
– В области пожарной безопасности,
– В области соблюдения правильной и безопасной эксплуатации
электроустановок.
7. Лица, допускаемые к работе на Симуляторах, должны быть
аттестованы на право проведения этих работ организацией, проводящей монтаж, наладку и тех. обслуживание Симуляторов, или администрацией предприятия, эксплуатирующего Симуляторы.
73
8. Во время эксплуатации Симуляторов запрещается:
– оставлять их без присмотра во время всего эксплуатационного
цикла катания;
– пользоваться посетителям младше 12 лет;
– пользоваться беременным женщинам;
– пользоваться посетителям при росте менее 150 см, более 190 см
или массе тела более 100 кг;
– пользоваться визуально неуравновешенным посетителям, имеющим заболевания сердца, позвоночника, тем, кто не может сидеть
нормально;
– пользоваться лицам, находящимся в состоянии алкогольного
или наркотического опьянения;
– курить;
– брать с собой животных, зонты, трости, крупногабаритные
предметы, продукты питания, напитки.
13. Необходимо соблюдать следующие противопожарные правила:
– не хранить вблизи Симуляторов бензин, керосин, эмалевые и
нитрокраски, а также другие легковоспламеняющиеся вещества;
– не курить на территории работы Симуляторов;
– вблизи площадки Симуляторов должны находиться средства
пожаротушения, а именно газовые или порошковые огнетушители.
Во избежание коротких замыканий не направлять на Симуляторы
водяную струю.
14. Оператор должен следить за тем, чтобы посетитель не пытался встать из кресла при работающих Симуляторах. В противном
случае Оператор должен выполнить остановку Симуляторов.
15. Во время работы Симуляторов Оператору необходимо следить
за тем, чтобы никто из посторонних по неосторожности не приблизился к нему или пульту управления.
16. Во время эксплуатации Симуляторов не допускать механических повреждений узлов Симуляторов, не прилагать чрезмерных
усилий к органам управления.
17. В случае возникновения странного шума (ударов, скрипов,
постукиваний и т.д.) в движущихся частях Симуляторов, следует
немедленно его выключить.
18. Запрещается: включать в работу Симуляторы при неисправном защитном заземлении, неисправных блокирующих устройствах; включать Симуляторы после автоматического его отключения аппаратами защиты без выяснения и установления причин отключения.
74
Приложение 1
Методика обновления моделей на симуляторах
PlatMotionManager – приложение, предназначенное для управления студенческими проектами на Unity, запускаемыми через
SimServer. Оно позволяет хранить все студенческие приложения
в одной директории и переключаться между ними с помощью пользовательского интерфейса.
Это руководство предназначено для версии 0.3.3. Проверьте соответствие версии в окне «О программе».
Рис. 8.1 Пользовательский интерфейс PlatMotionManager
Алгоритм работы следующий: PlatMotionManager смотрит в указанную преподавателем директорию со студенческими приложениями, проверяет, чтобы эти приложения назывались корректно –
«PlatMotionGame». Подходящие приложения отображаются в списке. Можно выбрать любое из них и PlatMotionManager скопирует
приложение и скрипт SendEnter в папку, откуда его сможет запу75
стить SimServer. При этом всё, что находилось в папке до этого, будет
удалено. Кроме того, есть возможность обновить файлы конкретного
приложения (с удалением всех файлов предыдущей версии) или добавить в указанную преподавателем директорию новое приложение.
PlatMotionManager вместе с его исходными кодами находится
на аккаунте лаборатории компьютерной графики ГУАП на сайте GitHub.com. Исходные коды доступны по ссылке https://github.
com/SUAICGLab/PlatMotionManager.
Приложение написано на языке С++14 с использованием библиотеки Qt 5.9.
Установка приложения:
Последнюю версию приложения можно скачать по этой ссылке:
https://github.com/SUAICGLab/PlatMotionManager/releases/latest.
Для установки просто распакуйте архив в любую папку и создайте ярлык для запуска PlatMotionManager.exe
Настройка приложения:
Настройка приложения выполняется преподавателем один раз
сразу после установки.
Откройте файл c настройками приложения settings.ini. Здесь
нужно указать директории, с которыми будет работать игра. Можно указывать как абсолютные пути (например, “C:/Simserver/
PlatMotion”, так и пути относительно приложения.
Например, если приложение лежит в “C:/Programs/
PlatMotionManager”, можно указать директорию “././ Simserver/
PlatMotion”.
При указании путей используйте прямые слеши ‹/›, поскольку
обратный слеш ‹\› всегда трактуется как экранирующий символ.
Доступны следующие параметры:
– apps-directory – директория, где будут храниться студенческие
приложения. Например: “C:/PlatMotionApplications”
– simserver-app-directory – директория, откуда SimServer запускает приложение. Обычно это “C:/Simserver/PlatMotion”
– default-app-directory – директория, где должно храниться приложение по умолчанию. Это должно быть корректно работающее
приложение, которое можно восстанавливать после потенциально
неуспешных студенческих экспериментов. Его нельзя обновлять.
Оно может находиться, например, в «C:/PlatMotionDefault».
– send-enter-directory – директория, в которой находится
SendEnter.exe. Его использует SimServer для запуска приложения
на Unity. Например, “C:/Simserver/SendEnter”.
76
При неверных настройках приложение не запустится. Ошибками в настройках считается отсутствие указанных директорий,
отсутствие прав на запись в apps-directory или simserver-appdirectory, отсутствие прав на чтение в default-app-directory или
send-enter-directory, отсутствие приложения в default-app-directory
и отсутствие SendEnter.exe в send-enter-directory.
Инструкция по использованию:
Соберите ваше приложение под именем PlatMotionGame.
Запустите PlatMotionManager. Нажмите кнопку «Добавить приложение», укажите путь к собранным файлам и имя приложения.
Дождитесь сообщения о том, что добавление прошло успешно.
Выделите загруженное приложение и нажмите «Подготовить
к запуску». Дождитесь сообщения о том, что подготовка прошла
успешно.
После этого вы можете запустить приложение через SimServer
как обычно, согласно инструкции запуска (вы можете попросить её
у преподавателя).
Чтобы восстановить гарантированно работающее приложение,
нажмите кнопку «Восстановить по умолчанию». Вы также можете
обновить выбранное вами приложение, нажав на кнопку «Обновить
приложение».
Инструкция по использованию доступна также в самом приложении по нажатию кнопки «О программе».
Чтобы удалить приложение, нужно зайти в директорию appsdirectory и удалить соответствующую приложению папку.
77
Приложение 2
Спецификация на оборудование симуляторов
1. Авиасимулятор «FLY-Motion»
Степени свободы
Напряжение переменного тока
Сила тока, не более
Потребляемая мощность (пиковая)
Потребляемая мощность (номинальная)
Температура окружающего воздуха
Масса
Статическая нагрузка
Динамическая нагрузка
Вращение на 360 градусов
по осям «КРЕН» и «ТАНГАЖ»
220–230 В / 50 Гц
30 A
65 кВт
3,0 кВт
+10 – +40°C
500 кг
не более 170 кг/м2
не более 200 кг/м2
Высота (в исходном состоянии)
1900 мм
Ширина (в исходном состоянии)
2000 мм
Длина (в исходном состоянии)
2300 мм
Высота (во время движения)
до 2400 мм
Ширина (во время движения)
до 2200 мм
Длина (во время движения)
Диаметр зоны безопасности, не менее
Срок эксплуатации
2300 мм
3000 мм
не менее 3-х лет
Краткие технические характеристики Fly-Motion
Основание.
– Металлическая рама.
– Мотор-редуктор
(мотор-редуктор
g500-B240
G50BB124MHBR2C-1,5
кВт,
мотор-редуктор
g500-B240
G50BB124MHBR2C-0,75квт).
– Кресло (Спринтер).
– Органы управления (педали, джойстик Thrustmaster Hotas
Warthog (2960720).
– Компьютер (процессор Intel Core i5 – 4590, кулер Cooler Master
Hyper 101 RR-H101–30PK-RU, материнская плата Gigabyte GA-Z97D3H, оперативная память Samsung DDR3 1600 8Gb M378B1G73DB0CK000, твердотельный накопитель 240Gb SSD SV300S37A/240G,
видеокарта GIGABYTE GeForce GTX 960 GV-N960IXOC-2GD, блок
78
питания 600W Zalman ZM600-GV, контроллер ST-LAB PCI-E X1,
I-350, 1 EXT COM9M, комплект клавиатура и мышь LOGITECH
MK220 920-003169, корпус серверный 3U Procase EM338-B-0),
Windows 7 Pro.
– Акустика (AVE C140).
– Сетевой интерфейс (маршрутизатор TL-WR841N, маршрутизатор TL-MR3020).
– Паспорт изделия, руководство оператора, правила безопасной
эксплуатации.
LED телевизор (Samsung 48 HDTV UE-48J6200AU).
Устройство управления авиасимулятора (планшет Asus Zenpad
8.0 Z380KL).
Игры
- ИЛ-2, Крылатые хищники.
- TopGun.
Комплект средств разработки программных приложений.
2. Автосимулятор «XD-Motion»
Степени свободы
Напряжение переменного тока
Сила тока, не более
Потребляемая мощность (пиковая)
Потребляемая мощность (номинальная)
Температура окружающего воздуха
Масса
вперед-назад/влево-вправо/вверхвниз/ вращение вокруг своей оси
на 180 градусов
220–230.. В / 50 Гц
30 A
6.5. кВт
3,0. кВт
+10 – +40°C
400. кг
Диаметр основания
1800. мм
Ширина без боковых сегментов основания
Высота сидения в исходном положении
Высота во время движения, не более
1450. мм
1930. мм
2800. мм
Диаметр зоны безопасности, не менее
Срок эксплуатации
2900. мм
не менее 3-х лет
Краткие технические характеристики XD-Motion
− Платформа.
– Подвесная люлька.
79
– Мотор-редуктор (редуктор червячный CM050U(i=15), редуктор червячный CM075U(i=60), фланец F=50, двигатель
MS8024/0,75/1500, двигатель MS8026/0,55/1000).
– Кресло (Спринтер)
– Органы управления (руль с педалями Logitech G27 Racing
Wheel 941-000092).
– Спецэффект “ветер” осевой вентилятор, контроллер управления, блок питания
– Компьютер (процессор Intel Core i5 – 4590, кулер Cooler Master
Hyper 101 RR-H101-30PK-RU, материнская плата Gigabyte GA-Z97D3H, оперативная память Samsung DDR3 1600 8Gb M378B1G73DB0CK000, твердотельный накопитель 240Gb SSD SV300S37A/240G,
видеокарта GIGABYTE GeForce GTX 960 GV-N960IXOC-2GD, блок
питания 600W Zalman ZM600-GV, контроллер ST-LAB PCI-E X1,
I-350, 1 EXT COM9M, комплект клавиатура+мышь LOGITECH
MK220 920-003169, корпус Cooler Master Elite 241 RC-241-KKN1),
Windows 7 Pro.
– Акустика (встроенная в ТВ).
– Сетевой интерфейс (маршрутизатор TL-WR841N, маршрутизатор TL-MR3020).
– Паспорт изделия, руководство оператора, правила безопасной
эксплуатации.
LED телевизор (LG 3D 49 HDTV 49LF620V).
Устройство управления автосимулятора (планшет Asus Zenpad
8.0 Z380KL).
Игры:
– R-Factor.
– Полный привод.
Очки 3D (в комплекте с телевизором).
Комплект средств разработки программных приложений.
3. Кинотеатр 5D-Motion
Год выпуска
2016
Габаритные размеры платформы (модуль)
(длина*ширина*высота) (м)
Степени свободы
Крены (право\лево\вперед\назад)
Амплитуда вертикальных перемещений (мм)
Количество посадочных мест
Требуемая мощность (кВт)
1,5*2,6*0,8 (не учитывая высоту кресел)
3
16 °\ 16 °\17 °\17 °
290
4
9
80
Год выпуска
2016
Масса платформы (загрузка 4 чел.) (кг)
330. (до 730)
Напряжение для эксплуатации симулятора (В)
Частота (Гц)
Объём масляного бака (л)
220.
50
40
DIN1055-DIN4112DIN4114-DIN15018
Стационарная
Стандарты DIN
Модель
Статическая нагрузка на пол с полной
загрузкой (кг\кв.м)
Динамическая нагрузка на пол (для 1 модуля)
(кг\кв.м)
Площадь опоры (для 1 модуля) (м)
Срок эксплуатации
245
445
4.2
не менее 3-х лет
Краткие технические характеристики 5D
Паспорт изделия, руководство оператора, правила безопасной
эксплуатации.
– Фильмы (15 шт.) + 100 шт.
Гидравлическая платформа 3-x степенная с 4 креслами.
Насосная станция (НСШ 2.2.16.200 220/380 Вольт).
Системы 3D визуализации Full HD проектор BenQ MH684, 3D
очки Benq 3D DLP-Link).
Системный блок управления
– Компьютер (процессор Intel Core i5 – 4590, кулер Cooler Master
Hyper 101 RR-H101-30PK-RU, материнская плата Gigabyte GA-Z97D3H, оперативная память Samsung DDR3 1600 8Gb M378B1G73DB0CK000, твердотельный накопитель 240Gb SSD SV300S37A/240G,
видеокарта GIGABYTE GeForce GTX 960 GV-N960IXOC-2GD, блок
питания 600W Zalman ZM600-GV, контроллер ST-LAB PCI-E X1,
I-350, 1 EXT COM9M, комплект клавиатура+мышь LOGITECH
MK220 920-003169, корпус Cooler Master Elite 241 RC-241-KKN1),
Windows 7 Pro.
– Сетевой интерфейс (встроенный).
Трап.
Активный акустический комплект (EUROSOUND FOCUS1100A-v2, 900 Вт, 2 сателлита, 1 сабвуфер).
Экран (экран ViewScreen Lotus (16:9) 406*305 (394*222) MW
WLO-16907).
81
Спецэффект «Ветер» (радиальный вентилятор BDRS 160-60).
Спецэффект «Брызги воды» (бачок омывателя с мотором, арматура омывателя силиконовая 2101-5208100-01С, обратный клапан,
тройник ВАЗ-2105-07, форсунка).
Спецэффект «Молния» (светодиодный стробоскоп).
Комплект средств разработки программных приложений.
82
Приложение 3
Необходимые скрипты и конфигурационный файл
Вместе с инструкциями передаются комплекты ассетов, состоящие из скриптов и конфигурационного файла.
Скрипт Settings.cs обеспечивает доступ к настройкам приложения, т. е. к информации из конфигурационного файла и из параметров запуска. Этот скрипт используют все перечисленные ниже
скрипты.
Net_ActivateComponents.cs – это скрипт, который помещается
на игровые префабы, которые будут использоваться в режиме многопользовательской игры, если они для этого специально не спроектированы. Предварительно на префабе должны быть отключены все
компоненты, отвечающие за движения префаба и получающие команды от игрока, а также камера, AudioListener и скрипт, отправляющий данные на SimServer. Этот скрипт активирует перечисленные компоненты на тех префбах, которые относятся к локальному
игроку.
Net_CustomManager.cs – основной скрипт для создания сетевой
игры. Позволяет задавать разные префабы для разных платформ,
а также указывать разные точки их спауна. Поддерживает работу
как в одиночном, так и в многопользовательском режимах.
Net_SendGameData.cs – скрипт, который пересылает данные
префабов на SimServer.
PM_config.xml – файл конфигурации, содержащий информацию об IP-адресах и портах SimServer’а для каждой из платформ,
адреса симуляторов для сетевой игры, а также настройки режима
игры и типа платформы, применяемые, когда приложение запускается без аргументов командной строки.
1. Код скрипта Settings.cs
using
using
using
using
using
using
System;
System.Collections.Generic;
System.IO;
System.Text.RegularExpressions;
System.Xml;
UnityEngine;
public enum GameMode
{
Offline = 0,
Online = 1
83
};
public enum PlatformType
{
XDMotion = 0,
FlyMotion = 1,
FiveDMotion = 2
};
/// <summary>
/// Этот класс обеспечивает доступ к настройкам приложения, т.е.
/// к инфе из конфиг-файла и из параметров запуска
/// </summary>
public static class Settings
{
public static GameMode gameMode
{
get; private set;
}
public static PlatformType platformType
{
get; private set;
}
public static List<string> networkServersIP
{
get; private set;
}
private static string[] serverIPs;
private static int[]
serverPorts;
private static string
configFilePath;
ется
/// <summary>
/// Конструктор. При создании объекта задаются значения по умолчанию и дела-
/// попытка чтения параметров сначала из файла, а затем из аргументов запуска.
/// Значения из аргументов запуска перекрывают значения из конфигурационного
файла.
/// </summary>
static Settings()
{
gameMode
= GameMode.Offline;
platformType
= PlatformType.XDMotion;
serverIPs
= new string[Enum.GetNames(typeof(PlatformType)).
Length];
serverPorts
= new int[Enum.GetNames(typeof(PlatformType)).Length];
84
xml”;
}
networkServersIP = new List<string>() {«127.0.0.1»};
configFilePath = Application.dataPath + “/StreamingAssets/PM_config.
ReadConfigurationFile();
ReadStartArguments();
/// <summary>
/// Возращает IP адрес Fly, XD или 5D сервера
/// </summary>
/// <param name=”platformType”>Тип платформы</param>
/// <returns>IP адрес</returns>
public static string GetServerIP(PlatformType platformType)
{
return serverIPs[(int) platformType];
}
/// <summary>
/// Возращает порт Fly, XD или 5D сервера
/// </summary>
/// <param name=”platformType”>Тип платформы</param>
/// <returns>Порт</returns>
public static int GetServerPort(PlatformType platformType)
{
return serverPorts[(int) platformType];
}
/// <summary>
/// Чтение настроек из аргументов запуска
/// </summary>
private static void ReadStartArguments()
{
//Первый параметр - имя файла
//Второй параметр - gameMode/platformType
string[] arguments = Environment.GetCommandLineArgs();
if (arguments.Length == 2 && arguments[1].Contains(@”/”))
{
//Строка должна быть вида “x/y”, где x - 0 или 1 (gameMode),
//y - 0, 1 или 2 (platformType)
Match match = Regex.Match(arguments[1], @”^[01]\/[012]$”);
if (match.Success)
{
string[] gameSettings = arguments[1].Split(‘/’);
gameMode
= (GameMode)
short.Parse(gameSettings[0]);
platformType = (PlatformType) short.Parse(gameSettings[1]);
}
85
}
}
/// <summary>
/// Чтение настроек из конфигурационного файла
/// </summary>
private static void ReadConfigurationFile()
{
if (!File.Exists(configFilePath))
{
Debug.LogError(“Файл конфигурации не найден!”);
return;
}
var doc = new XmlDocument();
doc.Load(configFilePath);
Text;
foreach (XmlNode node in doc.SelectNodes(“configuration”))
{
foreach (XmlNode child in node.ChildNodes)
{
switch (child.Name)
{
case “FlyServerIP”:
serverIPs[(int) PlatformType.FlyMotion] = child.Innercontinue;
case “FlyServerPort”:
serverPorts[(int) PlatformType.FlyMotion] = int.
Parse(child.InnerText);
continue;
Text;
case “XDServerIP”:
serverIPs[(int) PlatformType.XDMotion] = child.Innercontinue;
case “XDServerPort”:
serverPorts[(int) PlatformType.XDMotion] = int.
Parse(child.InnerText);
continue;
nerText;
case “FiveDServerIP”:
serverIPs[(int) PlatformType.FiveDMotion] = child.Incontinue;
case “FiveDServerPort”:
86
Parse(child.InnerText);
serverPorts[(int) PlatformType.FiveDMotion] = int.
continue;
case “GameMode”:
gameMode = (GameMode) int.Parse(child.InnerText);
continue;
}
}
}
}
case “PlatformType”:
platformType = (PlatformType) int.Parse(child.InnerText);
continue;
Match nameMatch = Regex.Match(child.Name, @”Server\d”);
if (nameMatch.Success)
networkServersIP.Add(child.InnerText);
}
2. Код скрипта Net_ActivateComponents.cs
using
using
using
using
using
UnityEngine;
UnityEngine.Networking;
UnityStandardAssets.Utility;
UnityStandardAssets.Vehicles.Aeroplane;
UnityStandardAssets.Vehicles.Car;
/// <summary>
/// Класс помещается на игровые префабы, которые будут использоваться в режиме
онлайн игры,
/// если они для этого специально не спроектированы. Предварительно на префабе
должны быть отключены
/// все компоненты, отвечающие за движения префаба и получающие команды от игрока,
/// а также камера, AudioListener и скрипт, отправляющий данные на SimServer.
Этот класс активирует
/// перечисленные компоненты на тех префбах, которые относятся к локальному
игроку.
/// </summary>
public class Net_ActivateComponents : NetworkBehaviour
{
void Start ()
{
ActivateComponents();
}
87
private void ActivateComponents()
{
if (!isLocalPlayer && Settings.gameMode == GameMode.Online)
return;
//Общее
if (GetComponentInChildren<Camera>()) GetComponentInChildren<Camera>().
enabled = true;
if (GetComponentInChildren<Rigidbody>()) GetComponentInChildren<Rigidbody
>().drag = 0;
if (GetComponentInChildren<AudioListener>()) GetComponentInChildren<Audi
oListener>().enabled = true;
if (GetComponentInChildren<Net_SendGameData>())
GetComponentInChildren<Net_SendGameData>().enabled = true;
//Машина
if (GetComponentInChildren<CarController>()) GetComponentInChildren<CarC
ontroller>().enabled = true;
if (GetComponentInChildren<CarUserControl>()) GetComponentInChildren<Car
UserControl>().enabled = true;
if (GetComponentInChildren<CarAudio>()) GetComponentInChildren<CarAud
io>().enabled = true;
//Самолёт
if (GetComponentInChildren<AeroplaneController>()) GetComponentInChildre
n<AeroplaneController>().enabled = true;
if (GetComponentInChildren<AeroplaneUserControl2Axis>()) GetComponentIn
Children<AeroplaneUserControl2Axis>().enabled = true;
if (GetComponentInChildren<ObjectResetter>()) GetComponentInChildren<Obj
ectResetter>().enabled = true;
if (GetComponentInChildren<LandingGear>()) GetComponentInChildren<Landin
gGear>().enabled = true;
if (GetComponentInChildren<AeroplaneAudio>()) GetComponentInChildren<Aer
oplaneAudio>().enabled = true;
//Кабина
if (GetComponentInChildren<Animator>()) GetComponentInChildren<Animat
or>().enabled = true;
}
}
3. Код скрипта Net_CustomManager.cs
using
using
using
using
System.Collections;
System.Collections.Generic;
UnityEngine;
UnityEngine.Networking;
/// <summary>
88
/// Сообщение, содержащее информацию о том, какой префаб выбрал клиент
/// </summary>
public class NetworkMessage : MessageBase
{
public short prefabIndex;
}
/// <summary>
/// Основной класс для создания сетевой игры.
/// </summary>
public class Net_CustomManager : NetworkManager
{
[Header(“Prefab Settings”)]
public GameObject XDMotionPrefab;
public GameObject FlyMotionPrefab;
public GameObject FiveDMotionPrefab;
[Header(“Spawn Points”)]
public NetworkStartPosition XDMotionSpawnPoint;
public NetworkStartPosition FlyMotionSpawnPoint;
public NetworkStartPosition FiveDMotionSpawnPoint;
private bool isServer;
private List<NetworkStartPosition> spawnPoints;
private void Start()
{
spawnPrefabs.Clear();
spawnPrefabs.Add(XDMotionPrefab);
spawnPrefabs.Add(FlyMotionPrefab);
spawnPrefabs.Add(FiveDMotionPrefab);
spawnPoints = new List<NetworkStartPosition>();
spawnPoints.Add(XDMotionSpawnPoint);
spawnPoints.Add(FlyMotionSpawnPoint);
spawnPoints.Add(FiveDMotionSpawnPoint);
if (Settings.gameMode == GameMode.Online)
StartCoroutine(JointGame());
else
StartOfflineGame();
Debug.Log(“Game Mode: “ + Settings.gameMode.ToString() + “, Platform
Type: “ + Settings.platformType.ToString());
}
/// <summary>
/// Обязательно перед закрытием программы делаем полный Disconnect, иначе
будут ошибки.
89
/// </summary>
private void OnApplicationQuit()
{
try {
Debug.Log(“Закрываем приложение”);
StopHost ();
StopClient ();
} catch (System.Exception ex) {
Debug.LogWarning (ex);
}
}
/// <summary>
/// Запускаем хост.
/// </summary>
private void StartupHost()
{
Debug.Log(“Пытаемся создать сервер”);
NetworkClient.ShutdownAll();
}
StartHost();
/// <summary>
/// Подключаемся к серверу.
/// </summary>
/// <returns></returns>
private IEnumerator JointGame()
{
string[] address = Settings.networkServersIP.ToArray();
for (int i = 0; i < address.Length; i++)
{
if (address[i] == “0.0.0.0”) continue;
Debug.LogFormat(“Подключаемся к серверу {0}”, address[i]);
networkAddress = address[i];
StartClient();
yield return new WaitForSeconds(0.5f);
if (!IsClientConnected())
{
NetworkClient.ShutdownAll();
continue;
}
else
90
{
}
}
}
Debug.LogFormat(“Удалось подключится к серверу {0}”, address[i]);
yield break;
StartupHost();
private void Disconnect()
{
if(!IsClientConnected())
{
Debug.Log(“Вы сервер. Отключаемся.”);
NetworkManager.singleton.StopHost();
}
else
{
Debug.Log(“Вы клиент. Отключаемся.”);
NetworkManager.singleton.StopClient();
}
}
/// <summary>
/// Вызывается на стороне сервера, когда клиент подключается к нему
/// с помощью ClientScene.AddPlayer
/// </summary>
/// <param name=”conn”></param>
/// <param name=”playerControllerId”></param>
/// <param name=”extraMessageReader”></param>
public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId, NetworkReader extraMessageReader)
{
NetworkMessage message = extraMessageReader.
ReadMessage<NetworkMessage>();
int selectedClass = message.prefabIndex;
Debug.Log(“Подключился клиент “ + (PlatformType) selectedClass);
GameObject player = Instantiate(spawnPrefabs[selectedClass],
spawnPoints[selectedClass].transform.
position,
spawnPoints[selectedClass].transform.
rotation) as GameObject;
NetworkServer.AddPlayerForConnection(conn, player, playerControllerId);
}
/// <summary>
91
/// Вызывается на стороне клиента, когда он подключается к серверу.
/// </summary>
/// <param name=”conn”></param>
public override void OnClientConnect(NetworkConnection conn)
{
NetworkMessage msg = new NetworkMessage();
msg.prefabIndex = (short) Settings.platformType;
}
ClientScene.AddPlayer(conn, 0, msg);
/// <summary>
/// Запускает оффлайн игру, т.е. просто спаунит нужный префаб
/// на сцену без установки сетевого соединения
/// </summary>
private void StartOfflineGame()
{
int platformType = (int) Settings.platformType;
Instantiate(spawnPrefabs[platformType],
spawnPoints[platformType].transform.position,
spawnPoints[platformType].transform.rotation);
}
}
4. Код скрипта Net_SendGameData.cs
using
using
using
using
using
System.Runtime.InteropServices;
System.Net.Sockets;
System.Collections;
UnityEngine;
System;
/// <summary>
/// Отсюда посылаются все данные на сервер
/// </summary>
public class Net_SendGameData : MonoBehaviour
{
public PlatformType platformType = PlatformType.FlyMotion;
/// <summary>
/// Включает или выключает режим сглаживания телеметрии.
/// Если значение True, то телеметрия от игрового объекта перед отправкой на
сервер
/// будут интерполироваться/сглаживаться.
/// </summary>
private bool m_isSmooth = false;
/// <summary>
/// Чем меньше число тем дольше мы будет ждать достижения целевого значения.
92
/// Число для мгновенного достижения целевого значения примерно 12
/// </summary>
private float m_InterpolateSpeed = 8f;
#region Socket
private Socket
private string
private int
m_s;
m_ip = «127.0.0.1»;
m_port = 00000;
#endregion
private void Start()
{
Connect();
}
/// <summary>
/// Обязательно перед закрытием программы закрываем сокет, иначе будут
ошибки
/// </summary>
private void OnApplicationQuit()
{
if(m_s != null)
{
m_s.Shutdown(SocketShutdown.Both);
m_s.Close();
}
}
private void Connect()
{
try
{
StopAllCoroutines();
m_ip = Settings.GetServerIP( (PlatformType) platformType);
m_port = Settings.GetServerPort((PlatformType) platformType);
//Создаем соккеты
m_s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
m_s.Connect(m_ip, m_port);
//Если все хорошо, то начинаем отправлять данные
if (m_s.Connected == true)
{
switch (platformType)
93
{
case PlatformType.FlyMotion:
StartCoroutine(SendCopterData());
break;
case PlatformType.XDMotion:
StartCoroutine(SendCarData());
break;
case PlatformType.FiveDMotion:
StartCoroutine(SendTelegaData());
break;
}
}
else Debug.LogError(«Не удалось подключится к серверу»);
}
}
catch (Exception e)
{
Debug.LogError(e.Message);
}
/// <summary>
/// Отправляем на Fly сервер телеметрию коптера.
/// </summary>
/// <returns></returns>
private IEnumerator SendCopterData()
{
WOPGameData data = new WOPGameData();
while (true)
{
yield return new WaitForSeconds(0.1f);
if (m_s.Connected == false)
{
Debug.LogWarning(«Связь с сервером прервана, переподключаемся»);
//Ожидаем 2 секунды
yield return new WaitForSeconds(2f);
Connect();
}
else if (!m_isSmooth)
{
data.fx = transform.forward.x;
data.fy = transform.forward.y;
data.fz = transform.forward.z;
data.ux = transform.up.x;
data.uy = transform.up.y;
94
data.uz = transform.up.z;
data.lx = transform.right.x * -1;
data.ly = transform.right.y * -1;
data.lz = transform.right.z * -1;
}
else
{
byte[] bytesData = getBytes(data);
m_s.Send(bytesData);
data.fx = Mathf.Lerp(data.fx, transform.forward.x, Time.deltaTime
* m_InterpolateSpeed);
data.fy = Mathf.Lerp(data.fy, transform.forward.y, Time.deltaTime
* m_InterpolateSpeed);
data.fz = Mathf.Lerp(data.fz, transform.forward.z, Time.deltaTime
* m_InterpolateSpeed);
data.ux = Mathf.Lerp(data.ux, transform.up.x, Time.deltaTime *
m_InterpolateSpeed);
data.uy = Mathf.Lerp(data.uy, transform.up.y, Time.deltaTime * m_
InterpolateSpeed);
data.uz = Mathf.Lerp(data.uz, transform.up.z, Time.deltaTime * m_
InterpolateSpeed);
data.lx = Mathf.Lerp(data.lx, transform.right.x * -1, Time.
deltaTime * m_InterpolateSpeed);
data.ly = Mathf.Lerp(data.ly, transform.right.y * -1, Time.
deltaTime * m_InterpolateSpeed);
data.lz = Mathf.Lerp(data.lz, transform.right.z * -1, Time.
deltaTime * m_InterpolateSpeed);
}
}
}
byte[] bytesData = getBytes(data);
m_s.Send(bytesData);
/// <summary>
/// Отправляем на XD сервер телеметрию машинки.
/// </summary>
/// <returns></returns>
private IEnumerator SendCarData()
{
GameData data = new GameData();
while (true)
{
yield return new WaitForSeconds(0.1f);
95
if (m_s.Connected == false)
{
Debug.LogWarning(«Связь с сервером прервана, переподключаемся»);
//Ожидаем 2 секунды
yield return new WaitForSeconds(2f);
Connect();
}
else if (!m_isSmooth)
{
data.fx = transform.forward.x;
data.fy = transform.forward.y;
data.fz = transform.forward.z;
data.ux = transform.up.x;
data.uy = transform.up.y;
data.uz = transform.up.z;
data.rx = transform.right.x;
data.ry = transform.right.y;
data.rz = transform.right.z;
data.x = transform.position.x;
data.y = transform.position.y;
data.z = transform.position.z;
}
else
{
byte[] bytesData = getBytes(data);
m_s.Send(bytesData);
data.fx = Mathf.Lerp(data.fx, transform.forward.x, Time.deltaTime
* m_InterpolateSpeed);
data.fy = Mathf.Lerp(data.fy, transform.forward.y, Time.deltaTime
* m_InterpolateSpeed);
data.fz = Mathf.Lerp(data.fz, transform.forward.z, Time.deltaTime
* m_InterpolateSpeed);
data.ux = Mathf.Lerp(data.ux, transform.up.x, Time.deltaTime *
m_InterpolateSpeed);
data.uy = Mathf.Lerp(data.uy, transform.up.y, Time.deltaTime * m_
InterpolateSpeed);
data.uz = Mathf.Lerp(data.uz, transform.up.z, Time.deltaTime * m_
InterpolateSpeed);
data.rx = Mathf.Lerp(data.rx, transform.right.x, Time.deltaTime *
m_InterpolateSpeed);
96
data.ry = Mathf.Lerp(data.ry, transform.right.y, Time.deltaTime *
m_InterpolateSpeed);
data.rz = Mathf.Lerp(data.rz, transform.right.z, Time.deltaTime *
m_InterpolateSpeed);
data.x = Mathf.Lerp(data.x, transform.position.x, Time.deltaTime
* m_InterpolateSpeed);
data.y = Mathf.Lerp(data.y, transform.position.y, Time.deltaTime *
m_InterpolateSpeed);
data.z = Mathf.Lerp(data.z, transform.position.z, Time.deltaTime
* m_InterpolateSpeed);
}
}
}
byte[] bytesData = getBytes(data);
m_s.Send(bytesData);
/// <summary>
/// Отправляем на XD сервер телеметрию телеги.
/// Оси Forward и Right инвертированы
/// </summary>
/// <returns></returns>
private IEnumerator SendTelegaData()
{
GameData data = new GameData();
while (true)
{
yield return new WaitForSeconds(0.1f);
if (m_s.Connected == false)
{
Debug.LogWarning(«Связь с сервером прервана, переподключаемся»);
//Ожидаем 2 секунды
yield return new WaitForSeconds(2f);
Connect();
}
else if(!m_isSmooth)
{
data.fx = -transform.forward.x;
data.fy = -transform.forward.y;
data.fz = -transform.forward.z;
data.ux = transform.up.x;
data.uy = transform.up.y;
data.uz = transform.up.z;
97
data.rx = -transform.right.x;
data.ry = -transform.right.y;
data.rz = -transform.right.z;
data.x = transform.position.x;
data.y = transform.position.y;
data.z = transform.position.z;
}
else
{
byte[] bytesData = getBytes(data);
m_s.Send(bytesData);
data.fx = Mathf.Lerp(data.fx, -transform.forward.x, Time.
deltaTime * m_InterpolateSpeed);
data.fy = Mathf.Lerp(data.fy, -transform.forward.y, Time.deltaTime
* m_InterpolateSpeed);
data.fz = Mathf.Lerp(data.fz, -transform.forward.z, Time.
deltaTime * m_InterpolateSpeed);
data.ux = Mathf.Lerp(data.ux, transform.up.x, Time.deltaTime *
m_InterpolateSpeed);
data.uy = Mathf.Lerp(data.uy, transform.up.y, Time.deltaTime * m_
InterpolateSpeed);
data.uz = Mathf.Lerp(data.uz, transform.up.z, Time.deltaTime * m_
InterpolateSpeed);
data.rx = Mathf.Lerp(data.rx, -transform.right.x, Time.deltaTime
* m_InterpolateSpeed);
data.ry = Mathf.Lerp(data.ry, -transform.right.y, Time.deltaTime
* m_InterpolateSpeed);
data.rz = Mathf.Lerp(data.rz, -transform.right.z, Time.deltaTime
* m_InterpolateSpeed);
data.x = Mathf.Lerp(data.x, transform.position.x, Time.deltaTime
* m_InterpolateSpeed);
data.y = Mathf.Lerp(data.y, transform.position.y, Time.deltaTime *
m_InterpolateSpeed);
data.z = Mathf.Lerp(data.z, transform.position.z, Time.deltaTime
* m_InterpolateSpeed);
}
98
}
}
byte[] bytesData = getBytes(data);
m_s.Send(bytesData);
/// <summary>
/// Конвертируем структуру в байты
/// </summary>
/// <param name=»str»></param>
/// <returns>Принимает структуры. WOPGameData, GameData и т.д.</returns>
private byte[] getBytes(object str)
{
int size = Marshal.SizeOf(str);
byte[] arr = new byte[size];
}
IntPtr ptr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(str, ptr, true);
Marshal.Copy(ptr, arr, 0, size);
Marshal.FreeHGlobal(ptr);
return arr;
#region GameData struct
/// <summary>
/// Пакет данных для флая
/// </summary>
[StructLayout(LayoutKind.Explicit)]
struct WOPGameData
{
[FieldOffset(0)]
public
[FieldOffset(4)]
public
[FieldOffset(8)]
public
[FieldOffset(12)]
public
[FieldOffset(16)]
public
[FieldOffset(20)]
public
[FieldOffset(24)]
public
[FieldOffset(28)]
public
[FieldOffset(32)]
public
[FieldOffset(36)]
public
[FieldOffset(40)]
public
[FieldOffset(44)]
public
[FieldOffset(48)]
[FieldOffset(52)]
[FieldOffset(56)]
[FieldOffset(60)]
[FieldOffset(64)]
[FieldOffset(68)]
public
public
public
public
public
public
float
float
float
float
float
float
float
float
float
float
float
float
x;
y;
z;
fx;
fy;
fz;
ux;
uy;
uz;
lx;
ly;
lz;
float
float
float
float
float
float
roll;
pitch;
yaw;
longitudinal_accel;
lateral_accel;
vertical_accel;
[FieldOffset(72)]
public float altitude;
[FieldOffset(76)]
public float speed;
[FieldOffset(80)]
public float shake_level;
(если такого параметра нет, то тряску
// высота полета
// скорость полета
// уровень тряски
99
включать в себя ускорения игрока)
заведен
[FieldOffset(84)]
[FieldOffset(85)]
public bool gear_down;
// шасси выпущены
public bool engine_started; // двигатель
[FieldOffset(86)]
public bool autopilot;
включен/выключен
[FieldOffset(88)]
public float flaps;
лок, например, в процентах
[FieldOffset(92)]
public float power;
ля в процентах
[FieldOffset(96)]
public int damage_flag;
повреждений самолета (или процент повреждения)
мертв
[FieldOffset(100)]
[FieldOffset(104)]
вражеских самолетов
[FieldOffset(108)]
своих самолетов
}
100
#endregion
// автопилот
// положение закры// мощность двигате// битовые флаги
public bool alive;
// игрок жив или
public int killed_enemies;
// количество сбитых
public int killed_allies;
// количество сбитых
/// <summary>
/// Пакет данных для Телеги и Машинки
/// </summary>
[StructLayout(LayoutKind.Explicit)]
public struct GameData
{
[FieldOffset(0)]
public float fx;
[FieldOffset(4)]
public float fy;
[FieldOffset(8)]
public float fz;
[FieldOffset(12)]
public float rx;
[FieldOffset(16)]
public float ry;
[FieldOffset(20)]
public float rz;
[FieldOffset(24)]
public float ux;
[FieldOffset(28)]
public float uy;
[FieldOffset(32)]
public float uz;
[FieldOffset(36)]
public float x;
[FieldOffset(40)]
public float y;
[FieldOffset(44)]
public float z;
[FieldOffset(48)]
public double dt;
};
}
// должны
5. Пример конфигурационного файла PM_config.xml
<?xml version=”1.0” encoding=”utf-8” ?>
<configuration>
<!--SimServer adresses-->
<FlyServerIP>127.0.0.1</FlyServerIP>
<FlyServerPort>20445</FlyServerPort>
<XDServerIP>127.0.0.1</XDServerIP>
<XDServerPort>20446</XDServerPort>
<FiveDServerIP>127.0.0.1</FiveDServerIP>
<FiveDServerPort>20446</FiveDServerPort>
<!--Server addresses for online games-->
<Server1>10.51.71.11</Server1>
<Server2>10.51.71.21</Server2>
<Server3>0.0.0.0</Server3>
<!--Default options when you run not through the server-->
<Network>1</Network><!--0 or 1-->
<PlatformType>0</PlatformType><!--0, 1, 2-->
</configuration>
101
СОДЕРЖАНИЕ
ВВЕДЕНИЕ................................................................................ 3
1. ЛАБОРАТОРННЫЙ ПРАКТИКУМ............................................ 5
Лабораторная работа № 1
«Изучение работы на симуляторе XD-Motion»................................. 5
Лабораторная работа № 2
«Изучение работы на симуляторе Fly-Motion»................................. 15
Лабораторная работа № 3
Изучение работы кинотеатра 5D-Motion......................................... 30
Лабораторная работа № 4
«Изучение работы на симуляторах
в многопользовательском режиме на платформе Unity».................... 38
2. ПРОГРАММИРОВАНИЕ СИМУЛЯТОРОВ.................................. 43
Практическая работа № 1
Создание приложения для симулятора XD-Motion........................... 43
Порядок выполнения............................................................... 43
Практическая работа № 2
«Создание приложения для симулятора Fly-Motion»........................ 49
Порядок выполнения............................................................... 49
Практическая работа № 3
Создание приложения для кинотеатра 5D-Motion............................ 56
Порядок выполнения............................................................... 56
Практическая работа № 4
Создание многопользовательского приложения
для работы на симуляторах.......................................................... 61
Порядок выполнения............................................................... 61
Примеры приложений................................................................. 70
2.1. Приложение «Shame Rocc»................................................. 70
2.2. Приложение Unity City................................................................. 72
3. Общие требования техники безопасности.................................... 73
Методика обновления моделей на симуляторах............................... 75
Спецификация на оборудование симуляторов................................. 78
Необходимые скрипты и конфигурационный файл.......................... 83
102
Документ
Категория
Без категории
Просмотров
0
Размер файла
8 794 Кб
Теги
bulgakov
1/--страниц
Пожаловаться на содержимое документа