Development of a 3D training environment for developing practical skills in configuring local area networks
Development of a 3D training environment for developing practical skills in configuring local area networks
Abstract
The article examines the development of an interactive three-dimensional platform aimed at teaching the construction and configuration of local networks using gaming technologies. The use of the Unity game engine has made it possible to create a flexible modular environment that combines clear visualisation, gamification elements and a practice-oriented approach. The developed solution provides the opportunity for step-by-step mastery of theoretical knowledge and practical skills, ensures user engagement, and forms sustainable skills for working with network infrastructure. The practical significance of the platform lies in its applicability in educational institutions, corporate training of specialists, and independent online learning. The technical solutions presented demonstrate the promise of integrating gaming technologies into the teaching of information technology disciplines.
1. Введение
В современном образовательном пространстве наблюдается устойчивый рост интереса к интерактивным технологиям, способным упростить освоение сложных дисциплин. Одной из таких дисциплин является построение и конфигурирование локальных сетей, играющих важную роль в деятельности современных организаций и предприятий. Однако традиционные средства обучения часто оказываются недостаточно эффективными для студентов, особенно в условиях формирования клипового мышления, когда внимание человека удерживается лишь на короткий промежуток времени и восприятие информации носит поверхностный характер. В связи с этим актуальным становится внедрение геймифицированных подходов, которые позволяют компенсировать указанные ограничения и повышают мотивацию обучающихся
.Интерактивная трехмерная платформа представляет собой средство обучения, в котором сложные абстрактные концепции сетевого взаимодействия преобразуются в наглядные визуальные образы. Такой подход способствует реализации принципа наглядности и обеспечивает возможность поэтапного освоения материала с постепенным усложнением заданий. В результате учащиеся не только лучше понимают теоретические основы сетевых технологий, но и получают практический опыт работы с виртуальными объектами, моделирующими реальные элементы сетевой инфраструктуры. Образовательный эффект усиливается благодаря элементам игры, включающим систему вознаграждений и уровней, что стимулирует интерес и поддерживает высокий уровень вовлеченности.
Для реализации подобной платформы был выбран игровой движок Unity, который предоставляет широкий спектр возможностей для создания трехмерных образовательных сред. Его применение обусловлено кроссплатформенностью, развитой экосистемой и активным сообществом разработчиков, наличием инструментов для работы с трехмерной графикой, поддержкой сетевых режимов, а также оптимизацией рабочего процесса и экономической эффективностью. Использование Unity позволяет создавать модульное программное обеспечение, расширяемое за счет добавления новых заданий и сценариев, что делает проект перспективным как в образовательной, так и в профессиональной сфере
.В отличие от существующих решений
, , , , ориентированных преимущественно на управление сетями, разработанная платформа направлена именно на обучение пользователей с минимальным уровнем предварительных знаний. В ней предусмотрено предоставление базового теоретического материала, необходимого для понимания принципов построения сетей, а также практических заданий различной сложности, выполняемых в интерактивном виртуальном пространстве. Такая организация процесса обеспечивает постепенное погружение в предметную область и способствует формированию у студентов устойчивых навыков конфигурации и диагностики локальных сетей.Практическая ценность разработанного программного обеспечения заключается в его многофункциональности. Оно может быть интегрировано в лабораторные работы для студентов информационно-технологических специальностей, использоваться в корпоративной подготовке сетевых администраторов, а также применяться в формате самостоятельного онлайн-обучения. Техническим результатом проекта является создание открытого программного продукта с модульной архитектурой, позволяющей преподавателям и специалистам адаптировать платформу под конкретные образовательные цели и расширять ее возможности. Таким образом, интерактивная трехмерная платформа становится эффективным инструментом для подготовки квалифицированных специалистов в области сетевых технологий, объединяя в себе теоретическую основу, практическую направленность и современные игровые подходы к обучению.
2. Анализ существующих аналогов приложения
В настоящее время для симуляции работы локальных сетей и для обучения другим IT-технологиям уже используются геймифицированные решения. Ниже рассмотрены три наиболее подходящих решений, которые можно взять как отправную точку при разработке интерактивного симулятора освоения локальных сетей.
Cisco Packet Tracer — это профессиональный сетевой симулятор от компании Cisco. Его широко применяют в учебных заведениях
. Он позволяет проектировать и конфигурировать виртуальные сети, используя виртуальные маршрутизатору, коммутаторы и другие устройства. Взаимодействовать с ними можно через командную строку. Интерфейс данного приложения можно посмотреть на рисунке 1.Ключевыми возможностями данного приложения являются следующие:
1) поддержка всех сетевых протоколов TCP/IP;
2) режим работы в реальном времени или в режиме симуляции, что позволяет анализировать обмен данными пошагово;
3) кроссплатформенность;
4) визуализация передачи пакетов и подробных лог взаимодействия протоколов.
Из преимуществ данного приложения можно выделить следующие:
1) оно позволяет обучающимся моделировать сложные сетевые конфигурации без физического оборудования;
2) служит хорошей площадкой для практики командной строки и отладки реальных сценариев.
Недостатки Cisco Packet Tracer:
1) ориентирован на оборудование Cisco;
2) в приложении полностью отсутствуют игровые механики, что может снизить пользовательской вовлеченности и мотивации;
3) отсутствие интуитивно понятного интерфейса.

Рисунок 1 - Интерфейс приложения Cisco Packet Tracer
Из ключевых особенности данной игры можно выделить:
1) реалистичная командная строка;
2) интересная сюжетная линия;
3) поддержка пользовательских сценариев.
Преимущества:
1) учёт логики работы консоли и базовых утилит Unix;
2) сюжет повышает интерес и мотивацию.
Недостатки:
1) требует определённых навыков работы с командной строкой;
2) минимальная визуализация;
3) недостаток ощущения окружения из-за отсутствия 3D визуализации;

Рисунок 2 - Интерфейс игры Hacknet
Ключевые особенности данной игры такие:
1) визуальное программирование с помощью блок-схем;
2) пошаговое введение в методы классификации, нейросети и обработку данных;
3) кастомизация рабочего интерфейса;
4) геймификация с юмором.
Из преимуществ данной видеоигры можно выделить:
1) доступность для пользователей без технических навыков;
2) интуитивная визуализация сложных алгоритмов.
Недостатки заключаются в следующем:
1) отсутствие изучение локальных сетей;

Рисунок 3 - Интерфейс игры while True: learn()
1) реалистичную симуляцию сетей из Cisco Packet Tracer;
2) геймифицированный подход из Hacknet;
3) визуальное и интуитивное обучение из while True: learn().
3. Проектирование платформы
Современный мир игровых технологий имеет обширное множество игровых движков. Некоторые из них пользуются популярностью, а некоторые почти неизвестны. Игровые индустрии либо используют готовые игровые движки для своих игр, либо создают собственные. Так австралийская команда разработчиков для своей очень популярной 2D видеоигры использовали готовый движок Unity. А американская организация Rockstar для своих игр создавали свой отдельный движок — RAGE Engine, что требует больших затрат ресурсов, но позволяет полностью контролировать технологию
, .В видеоиграх очень большую роль играет выбранный игровой движок. Как отмечает автор множества книг про программирование А.Н. Баланов, игровой движок — это программное обеспечение, которое облегчает процесс разработки видеоигр, содержащий обширный набор готовых инструментов, библиотек и ресурсов для создания игровых приложений
, . Обычно в набор входят следующие инструменты:1) графический рендеринг;
2) физический движок;
3) аудиосистема;
4) анимации;
5) средства программирования.
Индустрия разработки видеоигр сегодня предлагает широкий спектр готовых игровых движков. Каждый из них обладает своими уникальными характеристиками. Разработчики выбирают среду создания видеоигр исходя из нескольких критериев своего проекта.
Для разработки своей игры был выбран игровой движок Unity 6. Unity является одной из самых популярных игровых движков в индустрии. Выбор обусловлен следующими факторами:
1) кроссплатформенность;
2) интегрированная среда разработки:
− интуитивный редактор с визуальным построением сцен;
− встроенные системы;
− графические конвейеры.
3) экосистема Asset Store, содержащая готовые модели игровых элементов, плагины для программирования, инструменты UI;
4) язык программирования C#.
Для создания пользовательского интерфейса в проекте используется UI Toolkit — встроенная в Unity технология на основе UI Document и USS (Unity Style Sheets)
, . Преимущества выбора UI Toolkit заключают в следующих факторах:1) оптимизация производительности:
− работает быстрее Canvas, так как не требует постоянного перестроения интерфейса;
− использует декларативный подход, аналогичный веб-разработке, что снижает нагрузку на CPU.
2) Гибкость и масшатбируемость:
− поддержка стилей USS, что позволяет легко менять внешний вид элементов без правки кода;
− возможность динамической генерации UI через C#;
− адаптация под разные разрешения экрана.
Для реализации плавной и адаптируемой анимации и переходов в проекте используется пакет DOTween. Он обладает следующими особенностями:
1. Производительность:
− оптимизированная Tween-система, работающая быстрее стандартного Unity Lerp;
− поддержка пулинга анимаций, что снижает нагрузку на Garbage Collector.
2. Простота использования:
− читаемый синтаксис (методы записываются цепочкой);
− автоматическая обработка прерывания анимаций.
3. Богатый функционал:
− поддержка сложных кривых;
− анимация UI-элементов;
− возможность последовательных и параллельных анимаций.
4. Работает на всех платформах.

Рисунок 4 - Главное меню
1) главное меню;
2) изучение материала;
3) выбор задания (рис. 6);
4) игровой процесс;
5) конец задания.
Начальное игровое состояние — главное меню. Оно начинается с момента входа в игру. В нем игроку предоставлены возможности перейти к экрану изучения материала, перейти к экрану выбора задания. На главном экраны находятся несколько элементов интерфейса, такие как кнопка начала игры, кнопка выбора задания, кнопка выхода из игры, название игры. При взаимодействии с кнопками игрок переходит в следующее состояние.
В состоянии изучении материала на интерфейсе игрока появляется большая табличка с текстом и картинками. Игрок может листать содержимое, изучая теоретический материал, способы взаимодействия с устройствами и командами для их конфигурации. Игрок из данного состояния может вернуться в главное меню, либо перейти в состояние выбора задания.
В состоянии выбора задания у игрока появляется возможность перейти к конкретному заданию. Задания отображены таблицей. Кнопка с заданием перемещает пользователя в игровую зону данного задания. В кнопке с заданием находится текст, в котором написан номер задания.
Игровой процесс состоит из пространства, на котором расставлены игровые элементы. Среди них есть компьютеры и маршрутизаторы. Пользователь узнает о содержании задания из текстовой таблички, находящейся на стене. Затем пользователь настраивает устройства и выполняет задание, после чего игра переходит в следующее состояние.

Рисунок 5 - Диаграмма состояний игрока

Рисунок 6 - Экран выбора задания
4. Программная реализация
Одним из основных составляющих видеоигр является игровой персонаж (рис. 7). Игровой персонаж представляет пользователя в пространстве игры, управляется пользователем с помощью системы ввода и взаимодействует с окружением через физический движок.

Рисунок 7 - Игровой персонаж

Рисунок 8 - Настройка компонентов Mesh Filter и Mesh Renderer

Рисунок 9 - Настройка компонента PlayerMovement
Начальное состояние, в котором может находиться игрок — это состояние ходьбы (листинг 1). В этом состоянии игрока передвигается с минимальной скоростью, пока не столкнется с другим объектом. В методе Update вызывается MovePlayer(), в котором считывается нажатие пользователем клавиш WASD. Считывание клавиш происходит благодаря классу Input и методу GetAxis-Raw(string axisName). Этот метод отличается от GetAxis(string axisName) тем, что в нем отсутствует сглаживание движения, из-за чего после прекращения нажатия клавиши игрок немного продолжал своё движение. Чтобы считывать именно клавиши клавиатура необходимо указать в переменной axisName оси Horizontal и Vertical. Оптимизация перемещения персонажа в игровом пространстве достигается с помощью следующих факторов:
1) минимальные вычисления в Update();
2) отсутствие физических расчетов через Rigidbody для простых сцен;
3) подготовка к легкому расширению (бег, усталость и т.д.).
Листинг 1 — Реализация ходьбы персонажа в классе PlayerMovement
1void MovePlayer()
2{
3float moveX = Input.GetAxisRaw("Horizontal");
4float moveZ = Input.GetAxisRaw("Vertical");
5Vector3 direction = new Vector3(moveX, 0, moveZ).normalized;
6Vector3 moveDirection = playerObject.transform.TransformDirection(direction);
7playerObject.transform.position += moveDirection * _currentSpeed * Time.deltaTime;
8}При нажатии клавиши Shift игрок переходил в следующее состояние под названием бег (листинг 2). При активации этого состояния вызывается метод SprintEnable(), который вызывает SetSprint(bool state) со значением true. Когда пользователь перестает нажимать клавишу, вызывается метод SprintDisable(), который вызывает SetSprint(bool state) со значением false. В зависимости от передаваемого bool значения, скорость игрока меняется либо на значение скорости при беге, либо на значение скорости при ходьбе.
Листинг 2 – Реализация бега персонажа в классе PlayerMovement
1void SetSprint(bool state)
2{
3_currentSpeed = state ? sprintSpeed : moveSpeed;
4}
5public void SprintEnable() => SetSprint(true);
6public void SprintDisable() => SetSprint(false);Также игрок может находиться в состоянии прыжка. Данное состояние вызывается нажатием клавиши Space либо при ходьбе, либо при беге. Данное состояние реализуется в методе Jump() при помощи компонента Rigidbody и метода AddForce(). Этот метод запускает объект в указанном направлении с указанной силой. Чтобы игрок не имел возможности прыгать бесконечное количество раз, преодолевая верхнюю границу игрового пространства, метод Jump переключает флаг _isJumpingAllowed в значение false, чтобы нажатия на клавишу Space больше на считывались. Чтобы переключить этот флаг обратно в значение true, был реализован метод bool IsGrounded. Он использует физику объекта, запуская луч задаваемой длины от игрока по направлению вниз. Если луч задевает объект, то метод IsGrounded возвращает значение true, возвращая флаг в исходное состояние.
В видеоиграх при создании игрового объекта также добавляют ему возможность осматриваться вокруг себя. Для реализации этого функционала необходимо добавить камеру к объекту персонажа. Движение камеры реализовано в методе LookAround() (листинг 3), который вызывается из метода Update. Этот метод считывает перемещение курсора на экране с помощью метод Input.GetAxisRaw(string axisName). Если для перемещения персонажа необходимо было писать оси Horizontal и Vertical, то в данном случае необходимо указывать оси Mouse X и Mouse Y. Затем после считывания значение перемещения умножается на значение чувствительности мыши, задаваемой в инспекторе Unity, и на значение разности времени Time.deltaTime
. Это необходимо сделать, чтобы камера двигалась равномерно и без резкости. После считывания всех значений создается вектор поворота персонажа пользователя, а вместе с пользователем перемещается и камера, что позволяет игроку осматриваться в пространстве игрового мира.Листинг 3 – Реализация вращения камеры в классе PlayerMovement
1void LookAround()
2{
3float mouseX = Input.GetAxisRaw("Mouse X") * mouseSensitivity * Time.deltaTime;
4float mouseY = Input.GetAxisRaw("Mouse Y") * mouseSensitivity * Time.deltaTime;
5playerObject.Rotate(Vector3.up * mouseX);
6xRotation -= mouseY;
7xRotation = Mathf.Clamp(xRotation, -90f, 90f);
8playerCamera.transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
9}
Рисунок 10 - Переменные и функции класса PlayerInterfaceManager
Листинг 4 – Присвоение значений визуальным элементам интерфейса
1void OnEnable()
2{
3_hoverBox = playerInterface.rootVisualElement.Q("Hover-Box");
4_hoverBoxText = _hoverBox.Q<Label>("Hover-Box-Text");
5ClearHoverBoxText();
6}Для добавления текста в табличку другие классы обращаются к методу SetHoverBoxText(string text), передавая значение, которое необходимо вставить в нее. Перед добавлением переданного текста метод проверяет, не дублируется ли он в уже существующем тексте. В случае нахождения дубликатов метод завершает работу, не добавив переданной переменной text. Полный код данного метода можно посмотреть в листинге 5.
Листинг 5 – Метод SetHoverBoxText(string text)
1public void SetHoverBoxText(string text){
2string currentText;
3currentText = _hoverBoxText.text;
4if (currentText.Contains(text)) return;
5_hoverBoxText.text = $"{currentText}\n{text}";
6}Помимо добавления текста, другие классы могут и убрать текст, используя метод RemoveHoverBoxTextClean(string textToRemove). Этот метод использует регулярные выражения для точного удаления. Благодаря регулярным выражениям в тексте не остается лишних переносов строки и символов. Реализация метода удаления текста показана в листинге 6.
Листинг 6 – Метод RemoveHoverBoxTextClean(string textToRemove)
1public void RemoveHoverBoxTextClean(string textToRemove)
2{
3_hoverBoxText.text = System.Text.RegularExpressions.Regex.Replace(_hoverBoxText.text, $@"(\n)?{System.Text.RegularExpressions.Regex.Escape(textToRemove)}","");
4_hoverBoxText.text = _hoverBoxText.text.Trim('\n');
5}
Рисунок 11 - Зависимость классов интерфейса и движения от PlayerController

Рисунок 12 - Переменные и методы класса PlayerController
Начальным состоянием является AbleToMove. Исходя из названия можно понять, что это состояние, в котором игрок может свободно перемещаться, не находясь в процессе взаимодействия с окружающими устройствами. Находясь в этом состоянии в методе stateListener() вызываются следующие функции:
1) разрешение движения персонажа;
2) выключение интерфейса маршрутизатора;
3) выключение интерфейса компьютера;
4) блокировка позиции курсора;
5) установка спрятанного режима видимости курсора;
6) удаление из интерфейса пользователя строк, которые могли остаться после взаимодействия с устройствами.

Рисунок 13 - Демонстрация пользовательского интерфейса и игрового пространства в режиме подключения устройств к маршрутизатору
Для считывания нажатий на компьютерную мышь используется метод checkClicks, вызываемый в Update. Этот метод создает луч, исходящий от игрока по направлению центра экрана. При столкновении данного луча с объектом сначала проверяется флаг _routerAssigningModeComputerClicksOnly. Этот флаг принимает значение true в рассматриваемом состоянии AssigningRouter. С помощью данного флага, при нажатии на левую кнопку мыши, проверяются только объекты, тэг которых либо ComputerAccessZone, либо RouterAssignZone. Все остальные объект пропускаются. Это было сделано для того, чтобы назначать текущему маршрутизатору компьютеры и другие маршрутизаторы. Из состояния AssigningRouter можно перейти только в состояние AbleToMove при помощи нажатия на клавишу Escape.
Пользователь для настройки устройств в локальной сети взаимодействует с ними. Одно из устройств, с которым взаимодействует игрок – это компьютер. Чтобы с начать его настройку необходимо нажать левую кнопку мыши. Сам игрок перейдет в состояние настройки компьютера под названием UsingComputer. В момент перехода в данное состояние метод stateListener() выполняет следующие команды:
1) остановка движения игрока;
2) перевод курсора в видимый режим
3) отключение блокировки позиции курсора;
4) отключение режима задания устройств маршрутизатору
5) установка таблички подсказок в видимый режим;
6) удаление из таблички подсказок лишних текстов;
7) добавление в табличку подсказок инструкцию выхода из данного состояния.
Как и было сказано ранее в рассматриваемом состоянии пользовал находится в режиме настройки компьютера. В нем игрок не может перемещаться, прыгать и взаимодействовать с другими объектами и устройствами данного игрового пространства. Пользователь может только взаимодействовать с интерфейсом компьютера.
Похожим состоянием на UsingComputer является UsingRouter. В нем метод stateListener() выполняет те же функции, но вместо интерфейса компьютера взаимодействует с интерфейсом маршрутизатора. Пользователь из данных двух состояний может перейти обратно в состояние AbleToMove нажав кнопку, указанную в табличке подсказок в левом нижнем угле экрана. Таким образом, система состояний UsingComputer и UsingRouter обеспечивает последовательное взаимодействие пользователя с сетевым оборудованием, исключая возможность случайных действий вне текущего интерфейса настройки.

Рисунок 14 - Пример настройки компонента ComputerController
Следующая секция отвечает за камеру, которая включается при переходе в состояния UsingComputer. Чтобы включить камеру, пользователь должен нажать на компьютер. После нажатия в ComputerController вызывается метод, который считывает изначальную позицию камеры игрока, перемещает камеру компьютера в данную позицию, а затем благодаря пакету DOTween плавно пе-ремещает активную камеру к компьютеру, создавая эффект приближения.
Секции State и StartParameters отвечают за установку начальных значений. Переменная currentState отвечает за состояния компьютера и может быть равна значению «включен» либо «выключен». За включение и выключение компьютера отвечает кнопка, находящаяся на интерфейсе компьютера в правой нижней части его экрана.

Рисунок 15 - Пример интерфейса компьютера
1) кнопка включения или выключения компьютера: первый элемент, с которым может взаимодействовать пользователь, изменяющий текущее состояние на обратное, то есть с состояния «включен» компьютер переходит в «выключен» и наоборот;
2) текущее состояния, указывающее включен или выключен в данный момент компьютер;
3) IP-адрес: данное поле указывает установленный в текущий момент адрес в сети данного компьютера;
4) консоль вывода: в этой консоли выводится ответ обработчика команд;
5) консоль ввода: второй элемент интерфейса компьютера, с которым может взаимодействовать пользователь (в данном поле игрок вводит команды).
Класс ComputerController также содержит в себе методы, которые необходимы для выполнения условий задания. Одним из главных факторов выполнения задания — команда ping. В данном классе за это действие отвечает метод TryPing(string ip). Данный метод имеет тип значения bool. Если компьютер не подключен ни к одному маршрутизатору или компьютер не имеет своего собственного IP-адреса в сети, то метод возвращает значение false. При подключенном маршрутизаторе и наличии своего адреса, метод начинает проверку наличия переданного IP-адреса в подключенном роутере. После проверки возвращается значение true или false в зависимости от полученного значения проверки доступности.
За интерфейс компьютера отвечает класс PCInterfaceManager. Данный класс содержит в себе большое количество методов и проверок, которые необходимы для обеспечения правильности выполнения работы команд, действий и других взаимодействий с ним. Запуск интерфейса происходит из метода SetupInterface(), находящемся в классе ComputerController. Этот метод вызывает SetAndActivateInterface(ComputerController cc), передавая себя в качестве аргумента. Суть данного метода заключается в следующем:
1) переменным, отвечающим за визуальные элементы, задаются соответствующие элементы интерфейса;
2) переменной, отвечающей за хранение текущего используемого компьютера, задается текущий компьютер;
3) текущей консоли вывода задается хранящаяся в классе ComputerController история консоли компьютера;
4) кнопке включения и выключения задается функция, которая выполняет соответствующую функцию;
5) на событие нажатия клавиши Enter при использовании консоли ввода задается функция, отвечающая за обработку введенных пользователем команд.
Главным обработчиком команд, вводимых в компьютерный интерфейс, является класс PCInterfaceManager. Всего есть две команды, которые можно ввести в консоль:
1) set-ip;
2) ping.
После подтверждения команды, она разделяется на части, используя в качестве разделителя пробел. В текущую консоль вывода выводится запись User, а рядом прописывается введенная команда. Дальнейшая проверка не начинается, если введенная строка пустая.
Первая команда отвечает за установку IP-адреса используемому компьютеру. Чтобы задать этот адрес, необходимо написать данную команду, а рядом прописать желаемый адрес для компьютера. Перед установкой проверяется разрешение изменения адреса компьютера. На компьютере можно включить флаг, который заблокирует доступ изменению его адреса. Это необходимо для заданий, где адрес либо задан изначально и не должен изменяться, либо где адрес задается другим способом. Если проверка разрешения вернула успешный результат, проверяется было ли введено две части. Если проверка не прошла, в консоль выводится сообщение, которое информирует о неправильном вводе, показывая формат корректного ввода команды. При успешном прохождения каждой проверки вызывается метод SetIpAddress(string ip) в PCInterfaceManager. Адрес обязан быть в корректном формате виде *.*.*.*, где звезда означает любое число от 0 до 255 включительно. Если всё введено верно, то текущему компьютеру задается адрес, соответствующее сообщение выводится в консоль.
Вторая команда проверяет доступность передаваемого адреса компьютера. Команда ping проверяется аналогично команде set-ip, но в ней нет проверки разрешения замены IP-адреса компьютера в виду отсутствия необходимости в этом. При прохождении проверок корректности ввода команды вызывается метод Ping(string ip). Код данного метода представлен в листинге 7.
Листинг 7 – Работа метода проверки доступности компьютера
1void Ping(string ipAddress)
2{
3bool pingResult = _activePC.TryPing(ipAddress);
4StartCoroutine(PingDelayed(pingResult, ipAddress));
5if (!pingResult)
6{
7_currentConsoleOutput.Add("Console: No computers with this ipAd-dress");
8}
9}
10IEnumerator PingDelayed(bool success, string ip)
11{
12string delay = ip == _activePC.GetIpAddress() ? "0ms" : "32ms";
13string outputString = success ? $"Console: Ping delay {delay}" : "Host unreachable";
14for (int i = 0; i < 4; i++)
15{
16yield return new WaitForSeconds(0.32f);
17_currentConsoleOutput.Add(outputString);
18SetConsoleOutput(_currentConsoleOutput);
19}
20}Данный метод изначально проверяет доступность компьютера, сохраняя конечный результат. В зависимости от результата выводится либо задержка соединения, либо ответ о недоступности адресата. Также есть зависимость от IP-адреса. Если адрес адресата совпадает с адресом отправителя, то задержка равно нулю, иначе 32 мс.
Следующим ключевым устройством в локальной сети данной видеоигры является маршрутизатор. Маршрутизаторы используются для подключения компьютеров к одной сети. Также маршрутизаторы могут объединять несколько подсетей, образуя одну большую.

Рисунок 16 - Пример настройки класса RouterController
Для маршрутизатора реализованы следующие настройки:
1) IP-адрес: данная переменная отвечает за установленный адрес данного маршрутизатора в подсети;
2) Mask: эта переменная устанавливает маску, с помощью которой проверяется принадлежность введенного IP-адреса к подсети;
3) Enable RIP: флаг включение RIP отвечает за автоматическую настройку и обновление таблицы маршрутизаций;
4) RIP Interval: значение данной переменной устанавливает временной промежуток, прохождение которого вызывает метод для обновления таблицы маршрутизаций.
Для того чтобы пользователь взаимодействовал с маршрутизатором помимо режима, когда он может подключать или отключать от него устройства, был реализован интерфейс, с которым игрок может взаимодействовать. Управлением этого интерфейса занимается класс RouterInterfaceManager. Его задача заключается в обработке команд пользователя и выводе информации на экран. Метод, включающий данный интерфейс, вызывается из RouterController.
5. Заключение
Разработанная интерактивная 3D-платформа демонстрирует высокий потенциал в области обучения построению и конфигурации локальных сетей, объединяя в себе современные игровые механики, визуализацию и практико-ориентированный подход. Использование геймификации и трехмерной среды позволяет преодолеть ограниченность традиционных методик, делая процесс обучения наглядным, увлекательным и мотивирующим. Платформа обеспечивает не только постепенное освоение теоретического материала, но и формирование устойчивых практических навыков, необходимых для будущей профессиональной деятельности.
Практическая значимость решения заключается в его универсальности: продукт может применяться как в образовательных учреждениях при подготовке студентов технических специальностей, так и в системе корпоративного обучения, а также в формате самостоятельного онлайн-образования. Модульная архитектура и гибкость реализации открывают возможности для дальнейшего расширения функционала, интеграции новых сценариев и адаптации под конкретные цели.
Перспективы развития проекта связаны с внедрением многопользовательского режима, который позволит реализовать сетевые взаимодействия между несколькими участниками в реальном времени, расширением набора учебных заданий и уровней сложности, а также использованием технологий виртуальной и дополненной реальности для усиления эффекта погружения. Существенным направлением совершенствования может стать интеграция интеллектуальных подсказок и автоматизированной оценки действий пользователей на основе методов искусственного интеллекта, что повысит персонализацию и эффективность образовательного процесса. В долгосрочной перспективе подобные системы способны трансформировать практику преподавания сетевых технологий, обеспечив баланс между теорией, практикой и игровыми элементами, что будет способствовать подготовке специалистов нового поколения, ориентированных на работу в цифровой среде.
