Перейти к содержимому
Все проекты
Разработка ПОЗавершён2026

Room of Horror

Room of Horror превращает традиционный экзамен по безопасности сестринского ухода в иммерсивное VR-упражнение: обучающиеся ищут в намеренно неправильно обустроенной палате опасности, а взвешенный движок оценки с «шлюзом критичности» выставляет баллы. Это система из пяти частей — VR/десктоп-клиент на Unity, бэкенд на TypeScript, Express и PostgreSQL с WebSocket в реальном времени и панель преподавателя на React — построенная вокруг идеи «нет стандартных пациентов»: шесть разных профилей пациентов меняют то, что считается ошибкой.

Роль
Ведущий разработчик (студенческая команда из 7 человек)
Год
2026
Статус
Завершён
Категория
Разработка ПО
Инструменты и технологии
UnityC#XR Interaction ToolkitTypeScriptNode.jsExpressPostgreSQLSocket.IOReact
The virtual hospital room in Room of Horror, with a patient in bed, monitors, and a mobile care trolley.

Проблема

Студенты-медсёстры традиционно учатся замечать угрозы безопасности пациента через письменные экзамены или рискованную практику на реальных людях. Нет безопасного, повторяемого и измеримого способа тренировать навык «увидеть опасность с одного взгляда» — особенно для пациентов разного возраста, телосложения, языка и происхождения.

Контекст

Проектный модуль по программной инженерии в HWR Berlin, летний семестр 2026 года, разработанный совместно с Bundeswehrkrankenhaus Berlin в роли прикладного партнёра и на основе более ранней версии 1.0. На мне была примерно три четверти коммитов в команде из семи человек.

Процесс

Разнообразие как полноценные данные

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

Карта пациента в VR — многостраничный планшет — содержит ошибки в документации и диалоги принятия решений, например вызов переводчика или разрешение конфликта аллергий, так что опасности — это не только физические предметы.

  • Шесть профилей пациентов, каждый со своими сценариями ошибок
  • 32 каталогизированные ошибки с оценкой по тяжести (1–5)
  • Доступность: режимы имитации нарушений цветовосприятия и перемещение телепортом

Живой контур преподавателя

Игровой код связывает сессию в браузере с сессией в шлеме. Из веб-консоли преподаватель выбирает пациента, задаёт ошибки и устанавливает лимит промахов; слой WebSocket в реальном времени передаёт ему найденные ошибки и промахи. После раунда панель сводит результат, разбивает его по категориям и формирует обратную связь для тренера.

Ключевые решения

Взвешенная оценка со шлюзом критичности

Вместо простого подсчёта очков отдельный конвейер оценки начисляет баллы за каждую ошибку по тяжести и применяет жёсткий «критический» шлюз: пропуск критической находки проваливает в остальном пройденный раунд. Оценка и формирование обратной связи — отдельные этапы.

Один слой взаимодействия, два режима ввода

Одна и та же игра работает в VR и в обычном десктоп-режиме (мышь + клавиатура), причём логика взаимодействия с ошибками отделена от способа ввода. Это позволило тестировать и демонстрировать проект без шлема.

Реализация

Архитектура

Монорепозиторий разделяет клиент на Unity, API на Node/Express/TypeScript, панель на React, исходники 3D-моделей и сайт документации на Jekyll. Бэкенд разбит по доменам (база данных, эндпоинты, оценка, схемы, websocket, почта), конфигурация проверяется при запуске через Zod, а секреты хранятся в файлах окружения.

Поток данных: преподаватель (React) ↔ REST + Socket.IO ↔ Express/PostgreSQL ↔ клиент Unity, при этом конфигуратор комнаты на стороне Unity заново собирает физическую палату под выбранного пациента и ошибки.

Галерея

Веб-консоль преподавателя с выбором пациента — шесть профилей, включая Lina, Alex, Julia, Fatima, Daniel и Carlos, — с мастер-данными Carlos García.
Консоль преподавателя: выбор одного из шести профилей пациентов (или случайного пациента), у каждого свои мастер-данные и сценарии ошибок.
Широкий вид виртуальной больничной палаты от двери — кровать у окна, инвалидное кресло, ходунки, мониторы и тележка ухода.
Палата, которую обыскивает обучающийся, — намеренно обустроена с опасностями для поиска, играется в VR или в десктоп-режиме.

Результаты

  • Достигнуты все восемь целей подписанного соглашения о задачах (MUST 2/2, SHOULD 2/2, COULD 4/4).
  • Выпущены 6 профилей пациентов и 32 ошибки, взвешенные по тяжести и критичности, с наблюдением преподавателя вживую и генерируемой обратной связью после раунда.
  • Передача в сторону реального практического теста со студентами-медсёстрами в больнице-партнёре.

Извлечённые уроки

  • Проектирование единого слоя взаимодействия для VR и мыши с клавиатурой позволило тестировать и демонстрировать проект без шлема.
  • Моделирование разнообразия как полноценных данных, а не косметических аватаров, — именно это позволило одной и той же палате учить разному.