how to make a bullet spread ( shotgun ) in unity 2D

okay so I am working on a 2D shooting game and I made a script which makes the gun aimed at the direction of the mouse cursor, and I have succeeded into making a pistol and an assault rifle but I don’t really know how to make a shotgun and I don’t know how to make the bullets spread randomly in the direction of the mouse cursor
| here is the code of the basic pistol

public class Pistol : MonoBehaviour
{

    public Transform firePoint;
    public GameObject bulletPrefab;
    public GameObject reloadingText;

    public int maxAmmo = 10;
    private int currentAmmo;
    public float reloadTime = 1f;
    private bool isReloading = false;

    void Start()
    {
        currentAmmo = maxAmmo;
    }

    void Update()
    {

        if (isReloading)
            return;

        if (currentAmmo <= 0)
        {
            StartCoroutine(Reload());
            return;
        }
        
            if (Input.GetButtonDown("Fire1"))
            {

                
                Shoot();
            }
        
    }

    IEnumerator Reload()
    {
        isReloading = true;

        reloadingText.SetActive(true);

        yield return new WaitForSeconds(reloadTime);

        reloadingText.SetActive(false);

        currentAmmo = maxAmmo;
        isReloading = false;
    }
    void Shoot()
    {

        currentAmmo--;

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

and here is the code of the bullet

public class Bullet : MonoBehaviour
{

    public float speed = 20f;
    public Rigidbody2D rb;
    public GameObject bulletCollisionEffect;
    public int damage = 40;

    // Start is called before the first frame update
    void Start()
    {
        rb.velocity = transform.right * speed;
    }

    void OnTriggerEnter2D (Collider2D hitInfo)
    {
        Enemy enemy = hitInfo.GetComponent<Enemy>();
        if (enemy != null)
        {
            enemy.TakeDamage(damage);
        }
        Destroy(gameObject);
        Instantiate(bulletCollisionEffect, transform.position, Quaternion.identity);
        
       
       
    }
  
}

help would be really appreciated.

edit: I forgot to put the code where I make the gun aim at the mouse cursor :

public class Pivot : MonoBehaviour
{

    public GameObject myPlayer;

    // Update is called once per frame
    private void FixedUpdate()
    {
        Vector3 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;

        difference.Normalize();

        float rotationZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;

        transform.rotation = Quaternion.Euler(0f, 0f, rotationZ);

        if (rotationZ < -90 || rotationZ > 90)
        {
            if (myPlayer.transform.eulerAngles.y == 0)
            {
                transform.localRotation = Quaternion.Euler(180, 0, -rotationZ);

            } else if (myPlayer.transform.eulerAngles.y == 180) {

                transform.localRotation = Quaternion.Euler(180, 180, -rotationZ);

            }
        }
    }
}

Well looking over your code I don’t see anywhere where the bullets look toward the mouse but im guessing its something like this:

public void Shoot ( )
{
     firePoint.transform.LookAt(Input.mousePosition);
     Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
} 

For a shot gun I would do something like this:

public void Shoot ( )
{
     firePoint.transform.LookAt(Input.mousePosition);

     int bulletCount = 10;
     float spread = 1;
     Quaternion newRot = firePoint.rotation;

     for (int i = 0; i < bulletCount; i++)
     {
          float addedOffset =  (i - (bulletCount / 2) * spread;

          // Then add "addedOffset" to whatever rotation axis the player must rotate on
          newRot = Quaternion.Euler(firePoint.transform.localEulerAngles.x,             
          firePoint.transform.localEulerAngles.y, 
          firePoint.transform.localEulerAngles.z + addedOffset);

          Instantiate(bulletPrefab, firePoint.position, newRot);
     }
} 

Note: this isn’t tested and I don’t have a lot of experience in 2d lemme know if somethings wrong :slight_smile:

Check this out

@Reid_Taylor
i found it it works use firePoint.trasform.eulerAngles instead of localEulerAngles

My code looks like this

 if (timeBetweenShots <= 0)
        { 
            quaternion newRot = gunPoint.rotation;
            
            for (int i = 0; i < bulletCount; i++)
            {
                float addedOffset = (i - (bulletCount / 2) * spread);
                
                newRot = Quaternion.Euler(gunPoint.eulerAngles.x,gunPoint.eulerAngles.y,gunPoint.eulerAngles.z + addedOffset);
                Instantiate(projectile,gunPoint.position,newRot);
            }
            timeBetweenShots = startTimeBetweenShots;
        }
        else
        {
            timeBetweenShots -= Time.deltaTime;
        }