If you saved, then it wouldn’t change. Since you don’t save it inside a variable, when you get the forward / right vector of an actor, it gets the current one. For example, when you rotate an actor 90 degrees around z axis, it’s forward vector would now be on the +y direction (x = 0, y = 1, z = 0), and it’s right vector would be on the -x direction (x = -1, y = 0, z = 0)
Yep, those two specific unit vectors have a 90 degree angle between them. That’s not relevant though. They’re from different actors. Wait you’re not comparing the forward vectors though you’re comparing the locations. (Later Added)
You see, you’re setting the control rotation every tick, so every tick it’s rotation updates (and the direction of the character’s orientation vectors if the actor uses controller desired rotation), and the next tick the function where you get the orientation vectors is called, and they get the new, updated, current values. And the current values are used in to set the new rotation!
This latest blueprint code you provided seems to be rotating the the controller smoothly to face the enemy character. It doesn’t even have forward / right vectors in it. It gets the required rotation value to face the enemy with the Find Look at Rotation node. We take it as the target rotation. We set the current pin of the Rinterp To node to the controller which updates every tick, since we set it every tick. (New Explanation)