Top Down Bullets will not move in a 360 degree environment

I have a top down shooter. The player can move in the primary 4 directions, and follows the mouse for rotation.

When I shoot, the bullets never leave the player, they just spawn on top of the player sprite.

I have tried a combination of velocity and AddForce methods, but I don’t understand why the bullets never move. I have tried moving them in the Bullet’s script or in the calling WeaponAttack script that Instantiates the Bullet.

Side note for educational purposes: Which method is better? Should the bullet govern its direction and velocity or should the Instantiating class govern it?

PLAYER ROTATION SCRIPT

public class RotateToDirection : MonoBehaviour {

   Vector3 mousePos;
   Camera cam;
   Rigidbody2D rid;

   void Awake () {
     rid = this.GetComponent <Rigidbody2D> ();
     cam = Camera.main;
   }

   void FixedUpdate () {
     rotateToDirection ();
   }

   private void rotateToDirection() {
     mousePos = cam.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, Input.mousePosition.z - cam.transform.position.z));
     rid.transform.eulerAngles = new Vector3 (0, 0, Mathf.Atan2 ((mousePos.y - transform.position.y), (mousePos.x - transform.position.x)) * Mathf.Rad2Deg);
   }
}

WEAPONATTACK (SHOOTS THE BULLET)

public class WeaponAttack : MonoBehaviour {
   public GameObject bullet;
   public GameObject player;

   public float bulletSpeed;

   void FixedUpdate () {
     if(Input.GetMouseButton (0)){
       attack ();
     }

   }

   public void attack(){
     Instantiate (bullet, player.transform.position, player.transform.rotation );
     //Rigidbody2D bulletInstance = Instantiate(bullet, transform.position, Quaternion.Euler(new Vector3(0, 0, 1))) as Rigidbody2D;
     //bulletInstance.velocity = transform.forward * bulletSpeed;

     Physics2D.IgnoreCollision(bullet.GetComponent<Collider2D>(),  player.GetComponent<Collider2D>());

   }

}

BULLET

public class Bullet : MonoBehaviour {

   public float moveSpeed = 500.0f;
   private float killTime = 1.0f;
   private Rigidbody2D body;
 
   void Awake() {
     body = GetComponent<Rigidbody2D> ();
   }

   void FixedUpdate(){
     killTime -= Time.deltaTime;
     if (killTime <= 0) {
       Destroy (this.gameObject);
     } else {
       body.position = body.position * moveSpeed * Time.deltaTime;
     }
   }

}

From what I can see in the bullet script, you are effectively teleporting the bullet to move it, not actually using physics.
This is because you are directly setting the object’s position.

To move the bullet, you want to do AddForce or AddRelativeForce instead of setting the bullet’s velocity.
So in the Bullet script change the else clause too:

        body.AddRelativeForce(body.position *moveSpeed * Time.deltaTime, ForceMode2D.Impulse);