I would like to create a 2D UI widget which is an arrow pointing towards an actor. This widget rotates around the center of my screen like a clock hand (0 degrees is pointing at noon) and points to the target actor. I am making a flying game and this would be like the radar tracker. Its also very similar to the circular damage source indicators you see in fps games.
I am pretty bad with vector math, but given my actor location, my target actor location and my forward vector (and any other information I need), how can I derive the angle I need to rotate the widget to?
Hey, have you tried this?
Hey thanks for the reply Moshy,
I made a solution that seems to work. It feels a bit off, and its probably not the most efficient way to go about this, but visually, I can’t see anything too wrong about the behavior so I’ll post the code for what I did:
*** Start Code ***
FRotator MuzzleRotation = Camera->GetComponentRotation();
FVector MuzzleVector = MuzzleRotation.Vector();
FVector TargetVector = (TargetActor->GetActorLocation() - this->GetActorLocation());
RotationToTarget = TargetVector.Rotation() // ← This is what LookAtRotation() returns.
float TargetArrowAngleYaw = RotationToTarget.Yaw - MuzzleRotation.Yaw; //Get relative yaw to target
float TargetArrowAnglePitch = RotationToTarget.Pitch - MuzzleRotation.Pitch; //Get relative pitch to target
float dX = sin(FMath::DegreesToRadians(TargetArrowAngleYaw));
float dY = sin(FMath::DegreesToRadians(TargetArrowAnglePitch));
TargetArrowAngle = FMath::RadiansToDegrees(atan(dX / dY));
if (dY < 0 )
TargetArrowAngle += 180; //Make sure we are in the right quadrants
*** End Code ***
If somebody figures out a better way to do this please post it. Thanks guys.
Edit* Please ignore those smiley faces lol, I’m typing this reply from my laptop, don’t know how to get rid of them.