My bullet only fires in one direction.

I’ve seen people with similar issues but I haven’t quite found a solution yet. my bullet fires fine but only to the right. It’s a 2D metroid type and the bullet is supposed to shoot in the direction the character is facing (the bullet also has to flip because it has a fire tail that can’t face backwards) here are my player, bullet, and bullet forward scripts.

Player code:

using UnityEngine;
using System.Collections;

public class RobotController : MonoBehaviour 
{

	// how fast the charecter can go at max speed
	public float maxSpeed = 10f;
	bool facingRight = true; 
	
	bool grounded = false;
	public Transform groundCheck;
	float groundRadious = 0.2f;
	public LayerMask whatIsGround;
	public float jumpForce = 700f;

	// Update is called once per frame
	void FixedUpdate () 
	{
		grounded = Physics2D.OverlapCircle(groundCheck.position, groundRadious, whatIsGround); 	
		

		// how much charecter is moving
		float move = Input.GetAxis ("Horizontal");
		
		//moving charecter ("rigidbody2D.velocity.y" keeps vertical velocity the same)
		rigidbody2D.velocity = new Vector2 (move * maxSpeed, rigidbody2D.velocity.y); 
		
		//links movement to void flip, && = and
		if (move > 0 && !facingRight)
			Flip ();
		else if (move < 0 && facingRight)
			Flip ();
	}

	
	void Update()
	{
				
		// if jump button is pressed
		if (grounded && Input.GetButtonDown("Jump")) 
		{
						rigidbody2D.AddForce(new Vector2(0, jumpForce));
		}
	}
		//flipping the world instead of creating left facing animation
	void Flip()
	{
		//!=not
		facingRight = !facingRight;
		Vector3 theScale = transform.localScale;
		theScale.x *= -1;
		transform.localScale = theScale; 
	}
}

bullet code:

using UnityEngine;
using System.Collections;

public class bulletScript : MonoBehaviour {

	public GameObject bulletPrefab;

	public float fireDelay = 0.25f;
	float cooldownTimer = 0;

	//update is called once per frame
	void Update(){
		cooldownTimer -= Time.deltaTime;

		if( Input.GetButtonDown ("Fire1") && cooldownTimer <= 0 ) {
						// Shoot!
			Debug.Log ("Pew");
			cooldownTimer = fireDelay;

			Instantiate(bulletPrefab, transform.position, transform.rotation);
		}
	}
}

bullet forward code:

using UnityEngine;
using System.Collections;

public class MoveFforward : MonoBehaviour {

float maxSpeed = 20f;
	
// Update is called once per frame
void Update () {

	Vector3 pos = transform.position;

	Vector3 velocity = new Vector3 (maxSpeed * Time.deltaTime, 0, 0);

	pos += transform.rotation * velocity;

	transform.position = pos;


}

}

Any help is GREATLY appreciated.

In the bullet code you instantiate using

 Instantiate(bulletPrefab, transform.position, transform.rotation);

When doing this it takes the default bullet PREFAB rotation, which is to the right.

You need to reference the player rotation in some way (safer) or flip the bullet in the Flip() function.

Hello.
Your bullet forward code needs a way to know the player direction.
I am not an experienced programmer but i’ll try to explain the best as i can.
What i normally do is to create some constants in the player code that keeps track of where i am facing based on certain criteria(like moving with arrows, joystick etc) something like: if Input.KeyRight then player= isFacingRight.
Then in the bullet start method (which is the one that initialise the gameobject attached to) i assign the player direction to the bullet direction.
Hope it make sense without code 'cause it’s difficult to type stuff on a mobile…