Unreal EngineФорумBlueprints

Не могу создать "энергетическую волну" через блюпринты. Помогите 😢

#0
14:13, 2 июня 2024

Герой в игре должен выпускать объект, который движется ОТ игрока и, сталкиваясь с другими объектами, расчищает путь.
Всё бы ничего, но за 2 дня я так и не понял как это сделать :с


Загвоздка в том, что волна должна двигаться ОТ ИГРОКА. Add movement input очень классно определяет world direction, но не имеет в себе скорости передвижения. Add force действительно применяет силу и двигает объект, с одним НО: он двигает объект по x y z, которые заранее прописаны, соответственно ни о каком "от игрока" речи быть не может - это движение чётко по координатам.

Помогите пожалуйста, может есть ноды, которые решат мою проблему, либо же формула, через которую можно будет это настроить

#1
16:16, 2 июня 2024

а кто мешает тебе посчитать нужный вектор и его использовать в  add force или add impuls

#2
16:51, 2 июня 2024

Kemanorel
Вектор то постоянно меняется из-за перемещения игрока. А догадаться до формулы нужной не могу

#3
20:24, 2 июня 2024

Это будет что-то в этом роде, можно взять вектор скорости игрока, его массу и применить импульс к тому на что нужно воздействовать
Силу можно вообще произвольную применить, не обязательно брать массу игрока
Изображение

#4
9:00, 3 июня 2024

Итак, доп. проблемы и их решение:
Кроме того, что я не мог привязать движение волны к переду героя, появилась проблема, при которой волна спавнилась ровно из игрока, взаимодействуя с ним

А решение проще некуда. Волна должна выходить из ПЕРЕДА героя в определённой точке - поэтому я поставил эту точку в скелете, который использую. Далее нашёл делаю Get location, get rotation в акторе игрока, а в волне просто напросто добавляю 1 элемент - projectile movement (внимание, движимый блюпринт - actor, при pawn у меня не срабатывала эта же схема). И всё. Буквально.

#5
12:34, 3 июня 2024

В таких случаях проще взять getActorLocation игрока и прибавить к ней его getActorForwardVector умноженный на нужную длину (float).
Заморачиваться установкой сокетов имеет смысл в специфических случаях в духе сокета под оружие в руке персонажа, точки на голове для шляпы итд.
Чтобы применить воздействие только к определённым акторам, можно использовать тэги.
SphereTraceForObjects(только у него должна быть длина больше чем ноль, иначе не сработает) получить всех акторов в радиусе и потом forEachLoop перебрать и проверить наличие или отсутствие определённого тэга (actorHasTag)

#6
22:24, 19 июня 2024

Так сделай Actor с компонентом Projectile movement, как для стрельбы. Там в компоненте можно отключить гравитацию и настроить скорость и ускорение. Дальше сам)

Unreal EngineФорумBlueprints

Тема в архиве.