Unreal EngineФорумФизика

Как указать направление движения стрелы?

#0
21:15, 27 мар 2023

Создал Actor, в нем staticMesh стрелы и ProjectiveMovement.

Если задать у ProjectiveMovement initial speed скорость например 2000.000000,
то  стрела летит всегда в 1 направлении.

Velocity у ProjectiveMovement получается
(X=2000,Y=0.000000,Z=0.000000)


А как рассчитать Velocity чтобы стрела летела во врага?
Попробовал так, но снаряд улетает вверх вбок.

FVector3D arrowLocation = arrow.GetActorLocation(); // позиция стрелы
FVector3D targetLocation = enemy.GetActorLocation(); // позиция врага
FRotator lookAt = UKismetMathLibrary::FindLookAtRotation(arrowLocation, targetLocation); // направление стрелы
 
        
FTransform newTransformArrow; // новый transform для стрелы
newTransformArrow.SetLocation(arrowLocation);
newTransformArrow.SetRotation(lookAt.Quaternion());
arrow->SetActorTransform(newTransform); // поворачиваем стрелу к врагу
lookAt.Normalize(); 
arrow->ProjectiveMovement->SetVelocityInLocalSpace( lookAt.Euler() * 2000); // задаем Velocity по направлению к врагу со скоростью 2000
#1
22:23, 27 мар 2023

возможно нечто тупое напишу,  но попробуй  "SetVelocity"    с "SetVelocityInLocalSpace" тоже проблемы, или когда координаты цели 0.0.0.
кстати, это норма  для запуска прожектайла столько делать ?
у меня тупо ForwardVector*Speed>SetVelocity

#2
22:46, 27 мар 2023

Да, так работает, если просто Velocity задать и обычный вектор, а не Euler:

ProjectiveMovement->Velocity = lookAt.Vector() * 2000;

DuDuDuJ
> кстати, это норма  для запуска прожектайла столько делать ?
А что именно делать? Я просто спавню актор со статик мешем и прожектайлом и он сам летит если задать velocity.

#3
13:57, 7 апр 2023

velocity = (targetPosition - projectilePosition).normalize()

Unreal EngineФорумФизика

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