Только ленивый (или без интернета) человек не слышал про
Dispatch в прошлом месяце. Игрушка вышла достаточно бодрая. Не буду долго распыляться про неё, а остановлюсь на одном конкретном аспекте — мини-игре со взломами. Она показалась мне настолько простой и при этом увлекательной, что я решил попробовать реализовать её сам, заодно укрепив навыки в UE
Как обычно, пока это было просто идеей, казалось, что всё можно сделать буквально за сутки. Но довольно быстро я упёрся в неприятную особенность UE и его системы визуального программирования — оказалось не так уж понятно, как построить систему, которая будет хотя бы немного будет независима от движка. С Blueprint это, кажется, если не невозможно, то как минимум очень трудоёмко. В итоге я сделал всё максимально зависимым способом — полностью на API движка и напрямую во View представлении.
В идеальном мире реализация этой механики разбивалась бы на несколько слоёв:
🧩
Уровень модели и данных — здесь хранятся все данные и на их основе выполняются вычисления. Позиции блоков, правила переходов от блока к блоку и прочее.
🖼
Уровень представления — визуальное отображение уже вычисленных данных и их вывод пользователю.
Но вместо того чтобы выстраивать отдельную модель, я сделал всё сразу во View. Pawn-сфера после перехвата инпута в одну из сторон света кидает Line Trace (Raycast в Unity): сначала до доступного участка дороги, а затем — до следующего блока. От дороги она получает информацию о доступности прохода, а от блока — свою следующую позицию, если движение разрешено.
Поначалу мне казалось, что это негибкая система, и вообще я не привык делать настолько “просто”. Но сейчас понимаю, что зря всё это время переусложнял себе задачи и городил монструозные конструкции вместо банального решения в лоб. Потому что это работает и полностью выполняет свою задачу. И по масштабируемости тут тоже есть потенциал — как минимум для реализации других типов блоков.
Кажется, именно во время реализации этой простой механики я по-настоящему осознал
KISS-принцип 🙃
На видео:
1) как оно работает для пользователя
2) расширенный вид с отображением Line Trace и коллайдерами