Unanchored + LookAt causes weird part movement

I’m trying to make a unit movement with unanchored models, and it seems that I face some issues when I attempt to make the models face in a certain direction (i.e enemy object). What I want is so that the units’s direction of movement stays constant to their destination while they are moving, but the unit would rotate facing another object if necessary. I did a test code:

local primaryPart = model.PrimaryPart
			local currentPos = primaryPart.Position -- Vector3



			-- Determine where to look (nearby block or current facing direction)
			local lookAtPosition = nil
			lookAtPosition = destination[1]

			-- Calculate movement direction towards destination
			local direction = (destination[1] - currentPos).Unit
			local distance = (destination[1] - currentPos).Magnitude
			local moveStep = direction * MOVE_SPEED * deltaTime

			-- Move the primary part
			local newPos = currentPos + moveStep
			local lookAt = CFrame.lookAt(newPos, workspace.Origin.Position) -- main issue
			model:SetPrimaryPartCFrame(lookAt)

Result:


But if the code is replaced with:

local lookAt = CFrame.lookAt(newPos, newPos + direction)

No issues in the unit’s trajectory are observed, though it does not meet my needs.

I tried using AlignOrientation with PrimaryAxisLookAt, however, it recreates the same pathway issue.

I havent seen this issue before, but maybe try disabling AutoRotate in the humanoids and then using LookAt to orient the models

also, after calculating Direction, to make them not look up/down, you could set the Y values of some Vector3s to 0
e.g. PartA is at (0, 10, 0) and you want it to face PartB at (3, -100, 3) without looking downwards
you’d get direction1 with PartB.Position - PartA.Position
then you’d create Vector3.new(direction.X, 0, direction.Z).Unit as the new direction