Skip to content

15 — Інструменти налагодження

🇬🇧 English | 🇺🇦 Українська

Найчастіше питання під час інтеграції — «чому предмет не береться?». Модуль InteractionSystemDebug відповідає на нього без читання коду: консольні команди друкують стан системи, а панель на екрані показує фокус, руки, утримувані предмети, реєстр захоплень і відповіді сервера в реальному часі.

Простими словами. Це «приладова панель» системи. Замість того щоб гадати, чому дія не вдалася, ви бачите, що саме відповів сервер і яке правило спрацювало.

Інструменти працюють у редакторі, у PIE і в Development-збірках. У Shipping-збірках їх немає: команди не реєструються, а панель не відкривається, навіть якщо Blueprint викликає відповідний вузол.

Як відкрити панель

Спосіб Що зробити
Консоль Натисніть ~ і введіть InteractionOverlay. Повторна команда закриває панель
Blueprint Викличте Toggle Interaction Debug Overlay з вашим Player Controller, наприклад за клавішею налагодження
Перевірка стану Is Interaction Debug Overlay Open повертає, чи відкрита панель

На клієнті PIE спершу введіть EnableCheats: Unreal створює менеджер читів лише в одиночній грі та на сервері, тому без цієї команди клієнт відповідає «Command not recognized».

Панель не ставить гру на паузу: персонаж і далі керується, а курсор з'являється, щоб натискати кнопки панелі.

Що показує панель

Розділ Вміст
Заголовок Роль машини: STANDALONE, LISTEN SERVER, DEDICATED SERVER або CLIENT. Клієнт бачить свої руки й те, що сервер уже надіслав
Кнопки Refresh — перебудувати панель; Release held — відпустити все, що тримає локальний pawn, без кидка; Reset objects — повернути всі предмети на домашні місця (на клієнті надсилає InteractionResetAll на сервер); Close
Session Рівень, pawn гравця й час світу
Local sources Кожен InteractorComponent локального pawn: рука (LEFT/RIGHT/ANY), стан, фокус, утримуваний предмет, остання відповідь сервера й фактичні мережеві межі джерела
Held objects Для кожного утримуваного предмета: режим руху (DIRECT, PHYSICS, SCRIPTED), кількість рук, хід ручки чи «Free», прикріплення й частота оновлення («Every frame» або «Idle»)
Claims (server) Хто тримає або резервує кожен предмет. Реєстр живе на сервері, тому на клієнті розділ пояснює, як отримати дані командою
Recent answers Останні вісім відповідей сервера на запити цієї машини: час, рука, дія, ціль і вердикт. Наведіть курсор на червону відмову, щоб прочитати пояснення

Стани джерела

Стан Значення
Ready Рука вільна, шукає фокус і може брати
Waiting for the server Запит на захоплення надіслано, відповіді ще немає
Holding Рука тримає предмет
Tracking lost Рука не надсилає надійну позу (SetTrackingValid(false))
Inactive Компонент вимкнений

Консольні команди

Команда Аргументи Що робить Де виконується
InteractionOverlay — Відкрити або закрити панель Локально
InteractionStatus — Надрукувати кожне локальне джерело: стан, фокус, предмет у руці, останню відповідь сервера Локально
InteractionLog [Count], типово 10 Надрукувати останні відповіді сервера, новіші вгорі; під кожною відмовою — пояснення Локально
InteractionClaims — Надрукувати реєстр захоплень: предмет → pawn і руки, пов'язані резервування На сервері; клієнт пересилає команду через ServerExec
InteractionRelease — Відпустити все, що тримає локальний pawn, як скасування: нічого не кидається Локально; компонент сам повідомляє сервер
InteractionResetAll — Повернути всі предмети з маніпуляцією на домашні місця На сервері; клієнт пересилає команду

Відповіді команд з'являються в консолі гри й у журналі з категорією LogInteractionSystemDebug. Відповідь серверної команди повертається в консоль клієнта.

Журнал відповідей ведеться з початку гри, навіть коли панель закрита. Відповідь на запит приходить лише туди, звідки запит надіслано: клієнт бачить відповіді на свої дії, хост listen-сервера — на свої.

Рецепт: «чому не береться?»

  1. Відкрийте панель і наведіть руку на предмет.
  2. Focus порожній — клієнт навіть не вважає предмет ціллю. Перевірте колізію (блокує Visibility), відстань (Trace Distance), теги фільтра, Can Interact і чи не тримає рука інший предмет.
  3. Focus показує предмет, але після спроби Last answer червоний — сервер відхилив запит. Причина в тому самому рядку; пояснення — у підказці:
  4. InvalidPose — сервер не повірив позиції руки: перевірте Max Origin Distance і чи не закриває руку геометрія від очей pawn;
  5. NotReachable — на сервері між рукою й предметом щось стоїть або предмет уже в іншому місці;
  6. Claimed — предмет тримає інший гравець; InteractionClaims покаже хто;
  7. Unavailable — предмет відмовив: захоплення вимкнене (Set Grab Enabled), немає вільної руки, недійсний профіль;
  8. InvalidTarget — предмет не реплікується (у мережевій грі).
  9. Стан застряг у Waiting for the server — запит не дійшов або компонент вимкнений на сервері. Перевірте, що pawn реплікується й компонент активний на сервері.
  10. Предмет узято, але він поводиться дивно — подивіться Held objects: режим руху, кількість рук, обмеження, прикріплення.

Як прибрати модуль

Модуль нічого не додає в Shipping-збірку, тож зазвичай його залишають. Щоб повністю прибрати його з проєкту, видаліть запис InteractionSystemDebug з .uplugin і каталог Source/InteractionSystemDebug. Від нього не залежить жоден інший модуль; тести плагіна пропускають перевірки налагодження, якщо модуля немає.

Що далі