Trying to implement a cone shot in a 2D Game.

Greetings,

I’m trying to implement a cone shot in the 2D game for my enemy AI.

The idea is that the middle shot is aimed at the player and the other 4 are slightly spread with 2 on each side.

 public class MultiShoot : MonoBehaviour {

    private float angle;

    public GameObject bullet;
    public float startShotTime = 0.5f;
    public float delayShotTime = 0.5f;
    // Use this for initialization
    void Start()
    {
        InvokeRepeating("ShootMissle", startShotTime, delayShotTime);
    }

    // Update is called once per frame
    void Update()
    {

    }

    void ShootMissle()
    {
        //Instantiate(bullet, new Vector2(gameObject.transform.position.x, gameObject.transform.position.y + 0.40f), gameObject.transform.rotation);
        angle = 60f;
        for (int z = 0; z < 5; z++)
        {
            var shotRotation = gameObject.transform.rotation;
            shotRotation = Quaternion.Euler(0, 0, angle);
            Debug.Log(shotRotation);

            Instantiate(bullet, new Vector2(gameObject.transform.position.x, gameObject.transform.position.y), shotRotation);
            angle = angle - 30f;
        }

    }
}

So my idea here was start of with an angle of 60degrees and each time it runs through the forloop it it minuses 30, this was the middle shot will have 0 added to the player location making the middle shot aim at the player.

However I’m having an issue adding to the player location.

If you could point me in the correct direction or have a more effective way to do this, i’d greatly appreciate it.

Edit. I’ve managed to get the bullets to fly in the cone shot I need, however it’s now not getting the direction from the game object anymore.

Change this line:

         var shotRotation = gameObject.transform.rotation;
         shotRotation *= Quaternion.Euler(0, 0, angle);

By doing *= instead of = you will rotate your initial shotRotation by the desired amount, instead of simply overwriting it.