Help with creating a projectile based on Fixed Vector movement

Hi, I have a problem that I cannot seem to find an answer to.

Basically, I am creating a 3D game that uses 2D sprites for main characters and enemys. In order for me to do this, I need to ensure that my Plane is always facing the camera to map a sprite to it.

This means that I have prevented the object from rotating, and I move the object based on the following simple script.

// Control the Players movement
            if (Input.GetKey(playerControls.playerOneControlUp))
            {
                transform.position += new Vector3(0, 0, 0.035f * playerAttributes.playerOneBaseMoveSpeed) * Time.deltaTime;
            }

            if (Input.GetKey(playerControls.playerOneControlDown))
            {
                transform.position -= new Vector3(0, 0, 0.035f * playerAttributes.playerOneBaseMoveSpeed) * Time.deltaTime;
            }

            if (Input.GetKey(playerControls.playerOneControlRight))
            {
                transform.position += new Vector3(0.035f * playerAttributes.playerOneBaseMoveSpeed, 0, 0) * Time.deltaTime;
            }

            if (Input.GetKey(playerControls.playerOneControlLeft))
            {
                transform.position -= new Vector3(0.035f * playerAttributes.playerOneBaseMoveSpeed, 0, 0) * Time.deltaTime;
            }

However, I am now at the point of creating the fireball function of the main player, but I have no idea how to make the fireball emit in the direction that the player is currently moving (or has just moved in, in case he is motionless).

I am starting working with this simple script

            if (Input.GetKeyDown(KeyCode.Q)) 
                
                {

                    GameObject theFireball = Instantiate(fireball, transform.position, transform.rotation) as GameObject;
                        theFireball.rigidbody.AddForce(transform.forward * 100);
                }  

This of course will not work as the players forward is always facing the camera.

Also, I have the other slight issue that the object being instantiated is created inside the player and therefore add’s force to the player, so I need to create just in front of the players direction.

I hope that makes sense?

Could anyone help me with this?

In order to generate a vector for your AddForce, you need to save a previous position. You can fix the problem with your object interacting with the player using Physics.IgnoreCollision(). The logic will be something like this:

private Vector3 prevPosition;
public GameObject fireball;

void Update () {
	if (Input.GetKeyDown(KeyCode.Q)) {
		GameObject theFireball = Instantiate(fireball, transform.position, transform.rotation) as GameObject;
		Vector3 dir = (transform.position - prevPosition).normalized;
		theFireball.rigidbody.AddForce(dir * 100);
		Physics.IgnoreCollision (collider, theFireball.collider);
	}
	prevPosition = transform.position;

	// Your movement code goes here
}