Projectiles and weapon system

So im trying to make projectile fly in the direction player is facing and flip it in that direction because its not round. When the player facing right, projectile spawns and doesn’t move, even if the character is moving(its also flipped in the wrong way) . When the player is facing left, projecile spawns and only moves when the player is moving(its also facing wrong way)

Here is images:https://imgur.com/a/7BOj6h4

Here’s the script for the “bullet” :

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour
{
    public float Bulletspeed = 25f;
    public Rigidbody2D rb;
    private float speed;
    private bool right = true;
    private bool left = false;

    void Start()
    {
        speed = GameObject.Find("PLAYER").GetComponent<CharacterController2D>().Speed;
        if(speed<0 && left == false && right == true)
        {   
            gameObject.transform.localScale = new Vector3(0.2f,0.2f);
            rb.velocity = transform.right * Bulletspeed;
            left = true;
            right = false; 
        }
        else if (speed>0 && left == true && right == false)
        {   
            gameObject.transform.localScale = new Vector3(-0.2f,0.2f);
            rb.velocity = -transform.right * Bulletspeed; 
            left = false;
            right = true;
        }
    }

}

Variable “Speed” comes from character controller script:

using UnityEngine;
using UnityEngine.Events;
using System.Collections;
using System;


public class CharacterController2D : MonoBehaviour
{
	Animator m_anim;
	public float MovementSpeed = 15;
	public float JumpForce = 3000;
	public float Speed;

	private Rigidbody2D _rigidbody;
	private BoxCollider2D boxCollider2d;
	float inputHorizontal;
	private static GameObject Instance;

	
     void Awake()
    {
		boxCollider2d = transform.GetComponent<BoxCollider2D>();
		_rigidbody = transform.GetComponent<Rigidbody2D>();
		m_anim = gameObject.GetComponent<Animator>();

		if (Instance == null)
 		{
   			Instance = gameObject;
   			DontDestroyOnLoad(gameObject);
  		} else
 		{
         Destroy(gameObject);
   		}

    }
	void Update()
    {
		Speed = Input.GetAxis("Horizontal");                     //here

		var verSpeed = Input.GetAxis("Vertical");
		m_anim.SetFloat("Speed", Mathf.Abs(Speed));
		transform.position += new Vector3(Speed,0 ,0) * Time.deltaTime * MovementSpeed;
		if (Input.GetKeyDown("space") && IsGrounded())
		{
			_rigidbody.AddForce(new Vector2(0, JumpForce), ForceMode2D.Impulse);
		}
			
		if (Input.GetKeyDown("space"))
		{
			m_anim.SetBool("IsJumping", true);
		}			
		else if (IsGrounded())
		{
			m_anim.SetBool("IsJumping", false);
		}

		if((Speed > 0))
		{
			gameObject.transform.localScale = new Vector3(16,16);
		}
		if(Speed < 0)
		{
			gameObject.transform.localScale = new Vector3(-16,16);
		}

    }	
	
	private bool IsGrounded()
	{
		float extraHeightText = .01f;
		RaycastHit2D raycastHit = Physics2D.Raycast(boxCollider2d.bounds.center, Vector2.down, boxCollider2d.bounds.extents.y + extraHeightText);
		Color rayColor;
		if (raycastHit.collider !=null) {
			rayColor = Color.green;
		} else {
			rayColor = Color.red;
		}
		Debug.DrawRay(boxCollider2d.bounds.center, Vector2.down * (boxCollider2d.bounds.extents.y + extraHeightText));
		return raycastHit.collider != null;
	}
}

I don’t know what the hell is wrong, im very confused

remove line 16 to 28;
Add this thing to line 16:

 speed = GameObject.Find("PLAYER").transform.localScale.x;
 if(speed < 0)
 {
      speed = -1;
 }else
 if(speed > 0){
      speed = 1;
 }
 rb.velocity = new Vector2(Bulletspeed * speed, 0 ,0);

gameObject.transform.localScale = new Vector3(speed * 0.2f,0.2f);