Transform.forward not facing forward after rotation and drifts

I have an object that has two scripts:

using System.Collections; using System.Collections.Generic; using UnityEngine;  public class PlayerMovement : MonoBehaviour {     public CreatureController controller;     private Vector3 targetPos;      // Start is called before the first frame update     void Start()     {      }      // Update is called once per frame     void Update()     {         if (Input.GetMouseButton(0))         {             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);             RaycastHit hit;              if (Physics.Raycast(ray, out hit, 1000))             {                 targetPos = hit.point;                 targetPos.z = 0;             }              Debug.DrawLine(Input.mousePosition, targetPos, Color.green);              // Send vector to controller to make move             controller.Move(targetPos);         }     } } 

and:

using System.Collections; using System.Collections.Generic; using UnityEngine;  public class CreatureController : MonoBehaviour {     private Rigidbody m_Rigidbody;      private Vector2 m_CurrentVelocity;     private float speed = 5f;     private float m_SpeedMultiplier = 10f;     private float acceleration = .6f;     private float m_ClickDeadSpace = 1f;     private float m_RotationSmoothing = .05f;     private float m_RotationSpeed = 5f;     private Vector3 m_worldUp = Vector3.forward;     private Vector3 m_forward;     private Vector2 m_turnVelocity = Vector2.zero;      private void Awake()     {         m_Rigidbody = GetComponent<Rigidbody>();      }      //      void FixedUpdate()     {         m_forward = transform.forward.normalized;         Debug.DrawLine(transform.position, m_forward, Color.black);     }      public void Move(Vector2 targetPos)     {         Debug.Log("Target Position: " + targetPos);          // Rotate to face the right direction         Debug.Log("Current Rotation: " + transform.rotation);         Vector2 desiredAngle = new Vector2(transform.position.x - targetPos.x, transform.position.y - targetPos.y).normalized * -1;         Quaternion rotationAngle = Quaternion.LookRotation(desiredAngle, transform.up);         Debug.DrawLine(transform.position, desiredAngle, Color.red);         Debug.Log("Desired Rotation: " + rotationAngle);         transform.rotation = Quaternion.Slerp(transform.rotation, rotationAngle, m_RotationSpeed * Time.deltaTime);           float targetDistance = Mathf.Abs(new Vector2(transform.position.x - targetPos.x, transform.position.y - targetPos.y).magnitude);         Debug.Log(targetDistance);          Vector2 addedForce = m_forward * m_SpeedMultiplier * Time.deltaTime * (targetDistance / acceleration);          if (targetDistance > m_ClickDeadSpace && m_Rigidbody.velocity.magnitude <= speed)         {             m_Rigidbody.AddForce(addedForce);         }           Debug.Log("Current Velocity: " + m_Rigidbody.velocity.magnitude + " Target Distance: " + targetDistance + " Added Force: " + addedForce.magnitude);     }  } 

In FixedUpdate() I’m drawing a debug line that to visualize the forward direction for the object and upon starting the game, this shows the correct direction. As soon as the object rotates, however, I can see forward is now in a new direction and if I stop controlling the object I can see it has drift. What gives? Why can’t I always depend on transform.forward to always face towards the objects forward direction?