Если коротко:
В Unreal Engine тактильную отдачу связывают с конкретными событиями: контактом, захватом, ударом или предупреждением. Паттерн задаёт руку, амплитуду и длительность, а OpenXR или SDK передаёт команду поддерживаемому контроллеру. Проверять haptics нужно на разных устройствах, поскольку одинаковые параметры ощущаются по-разному, а постоянные сильные импульсы быстро превращаются в шум.
Unreal Engine VR haptics связывает игровые события с короткими и различимыми паттернами отдачи.
Тактильная отдача сообщает о контакте раньше, чем пользователь успевает прочитать интерфейс. Короткий импульс подтверждает захват, серия ударов передаёт работу механизма, а слабая вибрация предупреждает о границе. Если включать один максимальный сигнал на каждое событие, haptics быстро превращается в шум.
От игрового события к паттерну
Сначала определите смысл: подтверждение, сопротивление, удар, поверхность или предупреждение. Затем задайте амплитуду, длительность и форму. Паттерн должен отличаться от соседних событий, но не пытаться буквально воспроизвести каждую физическую вибрацию.
Храните паттерны в data assets, а не в десятках Blueprint-графов. Так дизайнер меняет их централизованно.
OpenXR и SDK производителя
Базовые импульсы можно отправлять через XR-интерфейс Unreal Engine. Расширенные клипы, частотные эффекты и жилеты требуют API конкретного производителя. Игровая логика вызывает абстрактное событие ImpactLight, а адаптер решает, как его воспроизвести на доступном устройстве.
Всегда предусматривайте контроллер без поддержки сложного паттерна: короткий импульс лучше полного отсутствия обратной связи.
Сила и длительность
Числа не переносятся буквально между моделями. Одинаковая амплитуда может ощущаться по-разному. Создайте три-четыре семантических уровня и откалибруйте их на каждом поддерживаемом контроллере.
Длинная вибрация утомляет и маскирует новые события. Для непрерывного процесса обновляйте эффект редко и завершайте его при потере контакта, паузе и смене уровня.
Контакт и захват
При наведении используйте едва заметный сигнал только если визуальной обратной связи недостаточно. Захват подтверждайте один раз, а не каждый physics tick. Удар масштабируйте по скорости в ограниченном диапазоне, иначе физический выброс создаст максимальную отдачу.
Общая система захвата описана в статье взаимодействие с объектами в Unreal Engine.
Локализация по рукам
Событие должно приходить в тот контроллер, который взаимодействует. Для двуручного предмета распределяйте сигнал по ролям: ведущая рука получает удар, опорная — более слабый отклик. Проверяйте смену рук и отпускание.
Доступность
Добавьте общий уровень haptics и возможность отключения. Важное предупреждение нельзя передавать только вибрацией: продублируйте его визуально или звуком. Пользователь может не ощущать сигнал или играть без совместимого устройства.
Тестирование
- каждый тип контроллера;
- левая и правая рука;
- быстрые повторные контакты;
- пауза во время эффекта;
- потеря контроллера;
- низкий заряд;
- отключённая вибрация.
Итог
Хорошая тактильная отдача кодирует смысл, а не украшает каждое действие. Отделите игровые события от API устройства, ограничьте число уровней, завершайте эффекты во всех аварийных состояниях и сохраняйте визуальный fallback. Тогда haptics делает взаимодействие яснее, не привлекая внимания к себе.