# Firing a curtain of bullets

I'm making a 2D shooter and wanted to know how to fire a curtain of bullets like in a bullet hell game from a single object. I'm trying to figure out how to alter a normal firing code to spread out in a fan shaped or random pattern if possible.

Edit: Code for firing //Fire rate of shots(Every # seconds, fire 1 shot) var fireRate: float =1.0; //Time to start shooting private var nextFire: float = 0.0;

``````function Awake()
{
// set our starting x position
originalX = transform.position.x;
}
function Update(){
//Move forward
//transform.position.x += 1 * speed * Time.deltaTime;
// if the user just pressed the "Shoot" button down (edit->project settings->input) & if the time since the game started is greater than the next fire time
//As long as the time the game starts and the fire rate = nextFire and is less the Time.time, it'll fire.

if(Input.GetButton("Shoot")&&Time.time > nextFire)
{
audio.Play();
// create a shot, to the right of us (so it doesn't clip into our collision), with 90 degrees rotation
nextFire = Time.time + fireRate;
//Instantiate(Shot, transform.position + Vector3.right*2, Quaternion.Euler(0, 0, 90));

Fire();
}

var BulletPrefab: GameObject;
var bulletSpeed = 100;

function Fire(){
var rotation : Quaternion = Quaternion.identity;
rotation.eulerAngles = Random.insideUnitSphere;
var bullet : GameObject;
bullet = Instantiate(BulletPrefab,transform.position,rotation);
bullet.rigidbody.velocity = bullet.transform.forward*bulletSpeed;
}

``````

If you are using particles for bullets you can use the random velocity setting.

If you are using rigid bodies for bullets you can use Random.insideUnitSphere to get a random direction for it to travel in.

e.g.

``````var BulletPrefab: GameObject;
var bulletSpeed = 100;

function Fire(){
var rotation : Quaternion = Quaternion.identity;
rotation.eulerAngles = Random.insideUnitSphere;
var bullet : GameObject;
bullet = Instantiate(BulletPrefab,transform.position,rotation);
bullet.rigidbody.velocity = bullet.transform.forward*bulletSpeed;
}

``````

If you wanted the bullets to move in a pattern then you can set the angle using some kind of math equation. Even very simple equations can result in interesting looking patterns. e.g. if you increment the y-rotation of the bullet fired by 10 degrees every frame they'll fan out like a spiral. If you then have a second set of bullets with their y-rotation incrementing in the opposite direction you'll get a double spiral that crosses over each other.

EDIT:

Changed rigid body to game object.

E.g. Maths:

``````yRotation : float = 0;

function IncrementAngle(){
yRotation += 5;
if(yRotation>359){
yRotation = -359;
}
}

``````