- Home /
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.
Answer by callen · Jan 24, 2018 at 06:55 PM
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.
Thanks mate, I've honestly just come across a post saying in order to add two quaternions you'll have to multiply them.