Development of a 3D training environment for developing practical skills in configuring local area networks

Research article
DOI:
https://doi.org/10.60797/IRJ.2025.162.140
Issue: № 12 (162), 2025
Suggested:
19.08.2025
Accepted:
06.10.2025
Published:
17.12.2025
83
1
XML
PDF

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) отсутствие интуитивно понятного интерфейса.

Cisco Packet Tracer имеет ряд ограничений для новичков. Во-первых, минимальные возможности визуализации сетевых механизмов в трехмерном пространстве затрудняют изучение физической топологии сетей. Во-вторых, отсутствие пошагового обучения с помощью геймификации делает самообучение менее мотивирующим. В-третьих, достаточно сложный интерфейс настройки оборудований затрудняет использование приложения. Инструмент по-прежнему остается полезным при подготовке к сертификации Cisco CCNA, поскольку он точно имитирует поведение реального оборудования. Такие особенности выводят это приложение на идеальный уровень для продвинутых пользователей и создают барьеры для обучения неподготовленных новичков.
Интерфейс приложения Cisco Packet Tracer

Рисунок 1 - Интерфейс приложения Cisco Packet Tracer

Hacknet — необычный симулятор хакерской деятельности с ярко выраженным нарративом. Пользователи получают задачу по взлому систем и анализу файлов через командную строку, очень напоминающую Unix
. Интерфейс игры можно увидеть на рисунке 2.

Из ключевых особенности данной игры можно выделить:

1) реалистичная командная строка;

2) интересная сюжетная линия;

3) поддержка пользовательских сценариев.

Преимущества:

1) учёт логики работы консоли и базовых утилит Unix;

2) сюжет повышает интерес и мотивацию.

Недостатки:

1) требует определённых навыков работы с командной строкой;

2) минимальная визуализация;

3) недостаток ощущения окружения из-за отсутствия 3D визуализации;

4) отсутствует обучение локальным сетям.
Интерфейс игры Hacknet

Рисунок 2 - Интерфейс игры Hacknet

while True: learn() — приложение головоломка, посвящённая основам машинного обучения
. В данной игре сюжет предлагает рассмотреть жизнь разработчика и его кота. Обучение происходит через визуальные блок-схемы. Интерфейс данной головоломки представлен на рисунке 3.

Ключевые особенности данной игры такие:

1) визуальное программирование с помощью блок-схем;

2) пошаговое введение в методы классификации, нейросети и обработку данных;

3) кастомизация рабочего интерфейса;

4) геймификация с юмором.

Из преимуществ данной видеоигры можно выделить:

1) доступность для пользователей без технических навыков;

2) интуитивная визуализация сложных алгоритмов.

Недостатки заключаются в следующем:

1) отсутствие изучение локальных сетей;

2) поверхностный охват тем.
Интерфейс игры while True: learn()

Рисунок 3 - Интерфейс игры while True: learn()

Каждое из рассмотренных приложений предлагает уникальный подход к обучению техническим навыкам. Для разработки интерактивной 3D-игры, направленной на обучение созданию локальных сетей, можно объединить лучшие элементы этих приложений:

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). В главном меню отображается название игры и кнопки. В зависимости от нажатой кнопки игрок может перейти к изучению материала либо к экрану выбора задания.
Главное меню

Рисунок 4 - Главное меню

Игрок во время игрока может находиться в следующих игровых состояниях (рис. 5):

1) главное меню;

2) изучение материала;

3) выбор задания (рис. 6);

4) игровой процесс;

5) конец задания.

Начальное игровое состояние — главное меню. Оно начинается с момента входа в игру. В нем игроку предоставлены возможности перейти к экрану изучения материала, перейти к экрану выбора задания. На главном экраны находятся несколько элементов интерфейса, такие как кнопка начала игры, кнопка выбора задания, кнопка выхода из игры, название игры. При взаимодействии с кнопками игрок переходит в следующее состояние.

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

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

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

В состоянии конца задания игрок видит перед собой текст об успешном выполнении задания. На экране также представлена кнопка для возвращения в исходное состояние – главное меню.
Диаграмма состояний игрока

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

Экран выбора задания

Рисунок 6 - Экран выбора задания

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

4. Программная реализация

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

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

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

Для того, чтобы дать персонажу любой вид, необходимо подключить к объекту в Unity определенные компоненты. Выбор 3D модели происходит в компоненте Mesh Filter. Для персонажа данной видеоигры была выбрана фигура Capsule. Таким образом, персонаж приобретает свою собственную 3D фигуру, но он пока не виден на сцене проекта. Для отображения используется другой компонент Mesh Renderer
,
. В нем есть поле, отвечающее за материал данной 3D фигуры. С помощью него был сделан желтый цвет игрового персонажа. Настройка этих двух компонентов представлена на рисунке 9.
Настройка компонентов Mesh Filter и Mesh Renderer

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

Таким образом, реализация 3D-модели игрового персонажа была выполнена с соблюдением принципа минимальной достаточности, что полностью соответствует задачам обучающего приложения. Данное решение демонстрирует эффективный подход к разработке функциональных элементов обучающих приложений, где приоритет отдается не визуальной составляющей, а стабильности работы и эффективности учебного процесса.
Добавления визуализации мало для полноценного создания персонажа игрока. Без внедрения физики в игрового персонажа он будет всего лишь статическим игровым объектом. Для того, чтобы игрок мог передвигаться и прыгать в пространстве, в Unity существуют специальные физические компоненты. В данном проекте использованы Rigidbody и CapsuleCollider. Rigidbody отвечает за физические свойства объекта, например гравитация, а CapsuleCollider отвечает за границу соприкосновения игрока с пространством. Перемещение персонажа реализовано в классе PlayerMovement (рис. 10).
Настройка компонента PlayerMovement

Рисунок 9 - Настройка компонента PlayerMovement

При запуске сцены с самого начала происходит назначение значений переменным. Метод Update вызывается каждый прошедший кадр во время работы приложения. Метод Update проверяет текущее состояние персонажа. Он может находиться в 5 разных состояниях.

Начальное состояние, в котором может находиться игрок — это состояние ходьбы (листинг 1). В этом состоянии игрока передвигается с минимальной скоростью, пока не столкнется с другим объектом. В методе Update вызывается MovePlayer(), в котором считывается нажатие пользователем клавиш WASD. Считывание клавиш происходит благодаря классу Input и методу GetAxis-Raw(string axisName). Этот метод отличается от GetAxis(string axisName) тем, что в нем отсутствует сглаживание движения, из-за чего после прекращения нажатия клавиши игрок немного продолжал своё движение. Чтобы считывать именно клавиши клавиатура необходимо указать в переменной axisName оси Horizontal и Vertical. Оптимизация перемещения персонажа в игровом пространстве достигается с помощью следующих факторов:

1) минимальные вычисления в Update();

2) отсутствие физических расчетов через Rigidbody для простых сцен;

3) подготовка к легкому расширению (бег, усталость и т.д.).

Листинг 1 — Реализация ходьбы персонажа в классе PlayerMovement

javascript
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

javascript
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

javascript
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}
Игровой персонаж, перемещаясь по полю может взаимодействовать с различными устройствами, чтобы выполнять задания. С целью интуитивного понимания игрового процесса, был реализован пользовательский интерфейс в классе PlayerInterfaceManager. Интерфейс реализован с помощью встроенного в Unity редактора UI Toolkit. Этот мощный инструмент схож с HTML и CSS. Пользовательский интерфейс содержит в себе небольшую табличку, в которой пишется текст. Табличка может адаптироваться под текст, чтобы отступ между текстом оставался постоянным, а значит случаев, когда текст выходит за рамки таблички возникать не будет. Данный класс содержит в себе публичные функции для взаимодействия с интерфейсом. С помощью функций можно выключить или включить интерфейс, задать текст в табличке, убрать часть текста или убрать его целиком. Переменные и функции класса PlayerInterfaceManager можно посмотреть на рисунке 11.
Переменные и функции класса PlayerInterfaceManager

Рисунок 10 - Переменные и функции класса PlayerInterfaceManager

В инспекторе Unity переменной playerInterface задается добавленный в объекте компонент UIDocument, который содержит в себе созданный интерфейс. Присвоение переменным _hoverBox и _hoverBoxText своих элементов происходит в методе OnEnable(), который вызывается в самом начале работы сцены (листинг 4). В методе происходит поиск элементов в документе по названию. Чтобы изначально текст не содержал в себе никаких лишних элементов, вызывается метод для очистки текста. Инициализация пользовательского интерфейса происходит на раннем этапе загрузки сцены через стандартный механизм Unity. Это гарантирует готовность UI-элементов до их первого использования.

Листинг 4 – Присвоение значений визуальным элементам интерфейса

javascript
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)

javascript
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)

javascript
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}
Реализованные классы управления игровым персонажем и пользовательским интерфейсом управляются главным классом (рис. 12). Класс PlayerController представляет собой главный мозг и переключатель состояний персонажа. В нем содержится большое количество переменных, слушателей и методов (рис. 13).
Зависимость классов интерфейса и движения от PlayerController

Рисунок 11 - Зависимость классов интерфейса и движения от PlayerController

Переменные и методы класса PlayerController

Рисунок 12 - Переменные и методы класса PlayerController

Класс PlayerController отвечает за взаимодействие пользователя с игровым пространством с помощью переключения состояний персонажа. В методе Update вызывается stateListener(). Этот метод отвечает за переключение видимости текстов интерфейса, за переключение видимости и блокировки позиции курсора, за видимость интерфейсов маршрутизатора и компьютера.

Начальным состоянием является AbleToMove. Исходя из названия можно понять, что это состояние, в котором игрок может свободно перемещаться, не находясь в процессе взаимодействия с окружающими устройствами. Находясь в этом состоянии в методе stateListener() вызываются следующие функции:

1) разрешение движения персонажа;

2) выключение интерфейса маршрутизатора;

3) выключение интерфейса компьютера;

4) блокировка позиции курсора;

5) установка спрятанного режима видимости курсора;

6) удаление из интерфейса пользователя строк, которые могли остаться после взаимодействия с устройствами.

В состоянии AbleToMove пользователь может перейти в 3 различных состояния. Первым из них является подключение и отключение устройств к маршрутизатору AssigningRouter (рис. 14). При активации этого метода маршрутизатор, с которым взаимодействовал игрок загорается зеленым цветом, а подключенные устройства загораются синим. В этом режиме ставится блокировка на переход в режим конфигурации устройств. В нем разрешено только подключение и отключение устройств к выбранному маршрутизатору.
Демонстрация пользовательского интерфейса и игрового пространства в режиме подключения устройств к маршрутизатору

Рисунок 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 обеспечивает последовательное взаимодействие пользователя с сетевым оборудованием, исключая возможность случайных действий вне текущего интерфейса настройки.

Одним из ключевых устройств данного проекта, с которым может взаимодействовать игрок компьютер. Основной класс, который отвечает за установленные параметры для сети, за интерфейс и остальное, что связано именно с конкретным компьютером, называется ComputerController. Данный класс добавляется в качестве компонента к объекту компьютера на сцене. Пример настройки данного компонента представлен на рисунке 15.
Пример настройки компонента ComputerController

Рисунок 14 - Пример настройки компонента ComputerController

На данном рисунке видно, что параметры распределены по секциям. В первой секции находятся параметры, отвечающие за подсветку компьютера. Подсветка компьютера необходима в режиме подключения и отключения устройств к маршрутизатору. Изначально в методе Start() подсвечивание компьютера отключается. За включение и отключение выделения отвечают методы HighlightComputer() и UnhighlightComputer() соответственно.

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

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

У каждого компьютера есть своя зона, при нажатии на которую пользователь подключается к его интерфейсу. Данная зона отмечена тэгом ComputerAccessZone. После нажатия на данную зону игрок переходит в состояние UsingComputer, камера перемещается ближе к компьютеру, а когда действие закончится, включается интерфейс. Пример интерфейса компьютера представлен на рисунке 16.
Пример интерфейса компьютера

Рисунок 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 – Работа метода проверки доступности компьютера

javascript
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 мс.

Следующим ключевым устройством в локальной сети данной видеоигры является маршрутизатор. Маршрутизаторы используются для подключения компьютеров к одной сети. Также маршрутизаторы могут объединять несколько подсетей, образуя одну большую.

В данной игре маршрутизатор реализован как сложная система, состоящая из трёх ключевых взаимосвязанных классов. Два из этих классов добавляются в объект маршрутизатора в качестве компонентов. Основным классом, отвечающий за хранение ключевых параметров для маршрутизатора является класс RouterController (рис. 17).
Пример настройки класса RouterController

Рисунок 16 - Пример настройки класса RouterController

Так же, как и в главном управляющем классе компьютера, тут реализована подсветка устройства при взаимодействии с ним. Переменные, находящиеся в сегменте Highlighting, отвечают за подсветку маршрутизатора. Это необходимо для того, чтобы наглядно показать пользователю принадлежность данного устройства другой подсети.

Для маршрутизатора реализованы следующие настройки:

1) IP-адрес: данная переменная отвечает за установленный адрес данного маршрутизатора в подсети;

2) Mask: эта переменная устанавливает маску, с помощью которой проверяется принадлежность введенного IP-адреса к подсети;

3) Enable RIP: флаг включение RIP отвечает за автоматическую настройку и обновление таблицы маршрутизаций;

4) RIP Interval: значение данной переменной устанавливает временной промежуток, прохождение которого вызывает метод для обновления таблицы маршрутизаций.

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

5. Заключение

Разработанная интерактивная 3D-платформа демонстрирует высокий потенциал в области обучения построению и конфигурации локальных сетей, объединяя в себе современные игровые механики, визуализацию и практико-ориентированный подход. Использование геймификации и трехмерной среды позволяет преодолеть ограниченность традиционных методик, делая процесс обучения наглядным, увлекательным и мотивирующим. Платформа обеспечивает не только постепенное освоение теоретического материала, но и формирование устойчивых практических навыков, необходимых для будущей профессиональной деятельности.

Практическая значимость решения заключается в его универсальности: продукт может применяться как в образовательных учреждениях при подготовке студентов технических специальностей, так и в системе корпоративного обучения, а также в формате самостоятельного онлайн-образования. Модульная архитектура и гибкость реализации открывают возможности для дальнейшего расширения функционала, интеграции новых сценариев и адаптации под конкретные цели.

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

Article metrics

Views:83
Downloads:1
Views
Total:
Views:83