raycast problem (solved)

Hi! The problem is that gun accuraty is perfect. How to make spread with raycast? Thanks for help!

var sparkle : ParticleEmitter;
var damage = 3;
var range = 100;
var spawnPoint : GameObject;
static var ammo = 120;
static var magazineSize = 30;
var fireRate : float = 0.1;
var lastShot : float = 0.0;
var reloadTime = 1.5;
var force = 100;
static var canReload = true;
static var canShoot = true;
var muzzleFlash : GameObject;
var muzzleFlashPossition : GameObject;


function Update () {
	
	autoReload();
	Reload();
	WeaponFire ();
	
	

	
	  
	
}

function WeaponFire() {
	if (Input.GetButton("Fire1") magazineSize > 0  Time.time > lastShot + fireRate  canShoot == true)
	{
	
	var direction = transform.TransformDirection(Vector3.forward);
	var hit : RaycastHit;
	
	audio.Play();
	
		if (Physics.Raycast(spawnPoint.transform.position,transform.forward,hit,range))
		{
			if (hit.rigidbody)
			{
				hit.rigidbody.AddForceAtPosition(force * direction,hit.point);
			}
			Instantiate(sparkle,hit.point, Quaternion.identity);
			hit.collider.SendMessageUpwards("ApplyDamage",damage,SendMessageOptions.DontRequireReceiver);
			
		}
		Instantiate(muzzleFlash,muzzleFlashPossition.transform.position,muzzleFlashPossition.transform.rotation);
		
		magazineSize--;
		lastShot = Time.time;
			}
}

function autoReload() {

	if ( magazineSize == 0  canReload == true  ammo != 0)
	{
		canReload = false;
		canShoot = false;
		yield WaitForSeconds(reloadTime);
		if (ammo >= 30 ) {
			needAmmo = 30 - magazineSize;
			ammo -= needAmmo;
			magazineSize = 30;
			needAmmo = 0;
			} else {
				
				for (var i=0;i < 30; i++)
				{
					if (ammo > 0  magazineSize + needAmmo < 30) 
					{
						ammo--;
						needAmmo++;
					}
				}
				magazineSize += needAmmo;
				needAmmo = 0;
			}
		canReload = true;
		canShoot = true;
	}
}

function Reload() {

	if (Input.GetButtonDown("Reload")  ammo > 0  canReload == true  magazineSize != 30)
	{
		canReload = false;
		canShoot = false;
		yield WaitForSeconds(reloadTime);
		if (ammo >= 30 ) {
			needAmmo = 30 - magazineSize;
			ammo -= needAmmo;
			magazineSize = 30;
			needAmmo = 0;
			} else {
				
				for (var i=0;i < 30; i++)
				{
					if (ammo > 0  magazineSize + needAmmo < 30) 
					{
						ammo--;
						needAmmo++;
					}
				}
				magazineSize += needAmmo;
				needAmmo = 0;
			}
		
		canReload = true;
		canShoot = true;
		
	}
}
var spreadFactorMax : float = 0.35;
var spreadFactorMaxIncrementPerSecond : float = 0.08;
var spreadFactorDecrementPerSecond : float = 0.03;

private var isFiring : boolean = false;
private var currentSpreadFactor : float = 0;

function WeaponSpreadFactor ()
{
	if (Input.GetButton ("Fire1")  magazineSize > 0)
	{
		var spreadFactorIncrement : float;
		spreadFactorIncrement = Random.Range (0.0, spreadFactorMaxIncrementPerSecond) * Time.deltaTime;
		currentSpreadFactor += spreadFactorIncrement;
	}
	else
	{
		currentSpreadFactor -= spreadFactorDecrementPerSecond * Time.deltaTime;
	}
	currentSpreadFactor = Mathf.Clamp (currentSpreadFactor, 0.0, spreadFactorMax);
}

function WeaponFire ()
{
	var randomX : float;
	var randomY : float;
	randomX = Random.Range (-currentSpreadFactor , currentSpreadFactor );
	randomY = Random.Range (-currentSpreadFactor , currentSpreadFactor );
	
	var directionRaycast : Vector3 = transform.forward + transform.TransformDirection (randomX, randomY, 0);
	
	
	if (Physics.Raycast(spawnPoint.transform.position, directionRaycast,hit,range))
	{
		//...
	}
}

Edit : forgot a }. I did not save the script, so errors couldn’t be checked by Unity. Should be solved !

Edit 2 : oops !

Thanks you very much! Code works perfect :slight_smile: But you forgot } after before :stuck_out_tongue: and where is

 randomX = Random.Range (-spreadFactorMax, spreadFactorMax); 
   randomY = Random.Range (-spreadFactorMax, spreadFactorMax);

should be

randomX = Random.Range (-currentSpreadFactor, currentSpreadFactor); 
	randomY = Random.Range (-currentSpreadFactor, currentSpreadFactor);

then it works good :slight_smile: