Для запуска хаотично передвигающегося шарика или шариков по сцене, начнем с настроек коллизий на Акторе который летает по сцене.
Далее в компоненты Актора добавляем два параметра
1. Скорость (Speed) - тип данных Float
2. Направление (Direction) - тип данных Vector
Переходим к логике движения Актора в Blueprint
Начинаем все с Event Tick, который перетикает в ноду AddActorLocalOffset, эта нода получает данные о местоположении Актора каждый кадр путем перемножения данных (Скорости с направлением и направления с параметром Delta Second экшен ноды Event Tick). На выходе мы получаем новые координаты куда будет двигаться наш Актор. Чтобы мячик не улетал в космос я заблокировал ему ось Z, просто не передавая ей значение.
Далее из ноды AddActorLocalOffset мы выводим ноду с данными Breack Hit Result, из которой сразу в проверку выводим информацию о столкновении с объектом (Blocking Hit). И если движение нашего Актора заблокировано (Branch == true) мы устанавливаем параметру Direction новый вектор движения. Новый вектор задается через функцию Get Reflection Vector, который получает информацию о текущем направлении и меняет его.
Далее добавляем логику изменения скорости при столкновении с объектом.
Для начала добавим новый компонент в Акторе, minSpeed который позволит задать минимальную скорость движения нашего Актора.
Далее добавляем блок изменения скорости при столкновении, для этого после проверки на столкновение Branch, ставим ноду Sequence, это просто разветвитель потока. Первый поток при зарегистрированном столкновении пойдет на нашу новую логику, а второй потом на наш предыдущий параметр SET который задает новое направление движения.
В логике изменения скорости, мы проверяем формулу (текущая скорость - (текущая скорость - 10%)) >= Минимальная скорость. Если скорость меньше или равна минимальной то мы записываем в новый параметр скорости результат из компонента minSpeed. А если выше минимальной то снижаем скорость на 10% и ждем следующего столкновения.
Замеченные баги и трудности.
Поскольку я заблокировал ось Z, то шарики не могут покидать свою плоскость. И у меня была проблема что шары сталкивались и застывали на месте при этом в логе шел бесконечный спам о столкновении с объектом. Либо шары меняли направление но скорость визуально была в разы ниже минимальной.
Эта трудность случилась из-за того что шарики были на разной высоте, по этому ось Z влияла при столкновении друг с другом. Если объектов много, высоту им лучше задать одну.
Надеюсь у Вас всё получится, если будут другие варианты воплощения данной задачи, жду Ваши Блюпринты в комментариях.