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-сервера — на свої.
Рецепт: «чому не береться?»¶
- Відкрийте панель і наведіть руку на предмет.
- Focus порожній — клієнт навіть не вважає предмет ціллю. Перевірте колізію (блокує
Visibility), відстань (Trace Distance), теги фільтра,Can Interactі чи не тримає рука інший предмет. - Focus показує предмет, але після спроби Last answer червоний — сервер відхилив запит. Причина в тому самому рядку; пояснення — у підказці:
InvalidPose— сервер не повірив позиції руки: перевіртеMax Origin Distanceі чи не закриває руку геометрія від очей pawn;NotReachable— на сервері між рукою й предметом щось стоїть або предмет уже в іншому місці;Claimed— предмет тримає інший гравець;InteractionClaimsпокаже хто;Unavailable— предмет відмовив: захоплення вимкнене (Set Grab Enabled), немає вільної руки, недійсний профіль;InvalidTarget— предмет не реплікується (у мережевій грі).- Стан застряг у
Waiting for the server— запит не дійшов або компонент вимкнений на сервері. Перевірте, що pawn реплікується й компонент активний на сервері. - Предмет узято, але він поводиться дивно — подивіться Held objects: режим руху, кількість рук, обмеження, прикріплення.
Як прибрати модуль¶
Модуль нічого не додає в Shipping-збірку, тож зазвичай його залишають. Щоб повністю прибрати його з проєкту, видаліть запис InteractionSystemDebug з .uplugin і каталог Source/InteractionSystemDebug. Від нього не залежить жоден інший модуль; тести плагіна пропускають перевірки налагодження, якщо модуля немає.
Що далі¶
- Значення кожної причини відмови й порядок перевірок — 13 — Мережева модель.
- Покрокова вправа з панеллю — урок 7.