Quick answer: Build rotation via Make Rot from X with a direction vector. Don’t pass a default FRotator/FQuat into SetActorRotation.
Look-at logic computes a direction. Code passes a zero quaternion when direction is zero-length. Actor rotates to identity.
The Fix
BP path:
ToTarget = Target.Location - Self.Location
Length(ToTarget) > 1?
True → Make Rot from X(ToTarget) → SetActorRotation
False → (skip)
C++:
if (!Direction.IsNearlyZero()) {
FRotator R = Direction.Rotation();
SetActorRotation(R);
}
Guard against zero-length direction. Use Rotation() or MakeFromX; both produce sensible orientations from a non-zero vector.
Verifying
Set rotation per tick from velocity. Stationary actor with zero velocity keeps last rotation, doesn’t snap.
“Guard zero. Build from direction. Rotation lands.”
Related Issues
For BP Interface defaults, see BPI defaults. For replication scope, see replication.
From direction. Guard zero. Spin keeps.