Создал 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
возможно нечто тупое напишу, но попробуй "SetVelocity" с "SetVelocityInLocalSpace" тоже проблемы, или когда координаты цели 0.0.0.
кстати, это норма для запуска прожектайла столько делать ?
у меня тупо ForwardVector*Speed>SetVelocity
Да, так работает, если просто Velocity задать и обычный вектор, а не Euler:
ProjectiveMovement->Velocity = lookAt.Vector() * 2000;
DuDuDuJ
> кстати, это норма для запуска прожектайла столько делать ?
А что именно делать? Я просто спавню актор со статик мешем и прожектайлом и он сам летит если задать velocity.
velocity = (targetPosition - projectilePosition).normalize()
Тема в архиве.