Как управлять камерой при зажатой кнопке | UE Touch Input

Привет, это не совсем гайд а скорее идея для фикса одной особенности. Наверняка при создании мобильного ввода у вас было много проблем, и одна из них это невозможность управление камерой при использовании кнопки. ЕСЛИ КОРОТКО: Кнопка должна уметь управлять камерой или прокидывать данные управления. ЕСЛИ ПОДРОБНО Стандартная кнопка перехватывает ввод, из-за чего сложно корректно обрабатывать свайпы. В качестве обходного решения используется кастомный элемент (Border), однако реализация должна оставаться универсальной и при необходимости применимой и к обычной кнопке. Проблема возникает, когда вы делаете управление камерой через свайпы. Все это из за особенностей функционала, а именно что все Widget-ы перехватываю ввод, из-за чего сигнал не может дойти до функции обработки которая может находиться в контроллере или где то еще. Как решить? Моя реализация (базовая логика в виджете) Виджет самостоятельно обрабатывает ввод: фиксирует начальную точку касания (OnTouchStart); отслеживает движение (OnTouchMove); вычисляет дельту (смещение); при отпускании (OnTouchEnd) завершает взаимодействие Вся математика (расчет координат, дельты и т.д.) происходит внутри самого виджета. Виджет используется как базовый класс, от которого наследуются конкретные UI-кнопки (по сути, тот же Border, но с логикой ввода). Результат вычислений (например, дельта движения) передаётся: через интерфейс или dispatcher в Character / Player Controller, где уже происходит непосредственное управление камерой. Таким образом: Виджет отвечает за сбор и обработку ввода Персонаж/контроллер за применение логики (движение камеры) Альтернативный (упрощённый) подход При необходимости можно упростить архитектуру: Виджет не выполняет никаких вычислений (не считает дельту и т.д.) Он только: обрабатывает события: OnTouchStart OnTouchMove OnTouchEnd и вызывает интерфейсные функции Вся логика (включая расчёты) переносится в: Player Controller или Character \\ как вам нужно Тогда этом случае: Виджет становится чистым прокси для ввода Вся логика централизуется в игровом коде и вы получаете возможность добавить это к себе в реализацию Тайм-коды: 00:00 Вступление 00:25 Основная проблема 00:44 Решения проблемы (идея) 02:02 Заключение ITCH.IO https://dev-er.itch.io Twitch https://www.twitch.tv/notunrealengineer Поддержка автора https://donationalerts.com/r/coder_0419

Иконка канала Сравниваем Симку
10 подписчиков
12+
2 дня назад
12+
2 дня назад

Привет, это не совсем гайд а скорее идея для фикса одной особенности. Наверняка при создании мобильного ввода у вас было много проблем, и одна из них это невозможность управление камерой при использовании кнопки. ЕСЛИ КОРОТКО: Кнопка должна уметь управлять камерой или прокидывать данные управления. ЕСЛИ ПОДРОБНО Стандартная кнопка перехватывает ввод, из-за чего сложно корректно обрабатывать свайпы. В качестве обходного решения используется кастомный элемент (Border), однако реализация должна оставаться универсальной и при необходимости применимой и к обычной кнопке. Проблема возникает, когда вы делаете управление камерой через свайпы. Все это из за особенностей функционала, а именно что все Widget-ы перехватываю ввод, из-за чего сигнал не может дойти до функции обработки которая может находиться в контроллере или где то еще. Как решить? Моя реализация (базовая логика в виджете) Виджет самостоятельно обрабатывает ввод: фиксирует начальную точку касания (OnTouchStart); отслеживает движение (OnTouchMove); вычисляет дельту (смещение); при отпускании (OnTouchEnd) завершает взаимодействие Вся математика (расчет координат, дельты и т.д.) происходит внутри самого виджета. Виджет используется как базовый класс, от которого наследуются конкретные UI-кнопки (по сути, тот же Border, но с логикой ввода). Результат вычислений (например, дельта движения) передаётся: через интерфейс или dispatcher в Character / Player Controller, где уже происходит непосредственное управление камерой. Таким образом: Виджет отвечает за сбор и обработку ввода Персонаж/контроллер за применение логики (движение камеры) Альтернативный (упрощённый) подход При необходимости можно упростить архитектуру: Виджет не выполняет никаких вычислений (не считает дельту и т.д.) Он только: обрабатывает события: OnTouchStart OnTouchMove OnTouchEnd и вызывает интерфейсные функции Вся логика (включая расчёты) переносится в: Player Controller или Character \\ как вам нужно Тогда этом случае: Виджет становится чистым прокси для ввода Вся логика централизуется в игровом коде и вы получаете возможность добавить это к себе в реализацию Тайм-коды: 00:00 Вступление 00:25 Основная проблема 00:44 Решения проблемы (идея) 02:02 Заключение ITCH.IO https://dev-er.itch.io Twitch https://www.twitch.tv/notunrealengineer Поддержка автора https://donationalerts.com/r/coder_0419

, чтобы оставлять комментарии