# spraying bullets

ive been working on an fps game in unity for some time now but i dont know how to spray my bullets instead of the bullets going straight forward which isnt very realistic.

can anyone help me with?

You'll need to use Random. I write code better than I write sentences:

``````public var maxDivergence : float = 5; // The amount in degrees the bullet can be "off" center

function Shoot() {

var divergence : Vector3 = Vector3.zero;

// then we want to randomize the rotation around the X axis
divergence.x = (1 - 2 * Random.value) * maxDivergence;
// and the rotation around the Y axis
divergence.y = (1 - 2 * Random.value) * maxDivergence;
/* Random.value only gives you a positive float between 0 and 1
* (1 - 2 * Random.value) makes that between -1 and 1
*/

// instantiate the bullet
var bullet : Transform = (Transform) Instantiate(bulletPrefab, transform.position, transform.rotation);

// now we'll apply the divergence
bullet.Rotate(divergence);

}

``````

It would be more efficient to make the Quaternion rotation before instantiating the prefab but Quaternions scare me. I'm making this a Wiki maybe someone will add it in.

@Rennat, Since I canâ€™t add a reply for some reason, I will post it as a separate answer. I enjoy that there is a script that uses angles instead of vector movement. This way, the gun will be less accurate at distance. A simple vector movement means that while the gun will be inaccurate, it will be just as inaccurate at infinity distance than at point blank distance. Thanks!

Heres the script that I use for my weapons. It may not be efficient but it does get great results.

``````public float accuracy;
public float aimAccuracy;
public float hipAccuracy;
private Quaternion shotAcc;

public Transform shotPoint;

if(Input.GetKey(KeyCode.Mouse1))
{
accuracy = aimAccuracy;
camObj.fieldOfView = 40;

}
else
{
camObj.fieldOfView = 50;
accuracy = hipAccuracy;
}

{
if (Input.GetKeyDown(KeyCode.Mouse0) && !Input.GetKey(KeyCode.LeftShift) && Time.time > nextFire)
{
if (magAmmo > 0)
{

shotAcc = Quaternion.Euler(Random.Range(-accuracy, accuracy), Random.Range(-accuracy, accuracy), 0);
shotPoint.localRotation = shotAcc;

Shot();
shotSound.Play();
magAmmo--;
shotsFired++;
muzzleFlash.Play();
}
}

}
``````