Gun script using Physics.Raycast not working?

I am using these scripts for my game to make my gun fire and shoot zombies.

This is the script on the gun:

function FireOneShot () {
	var direction = transform.TransformDirection(Vector3.forward);
	var hit : RaycastHit;
    Debug.DrawRay(transform.position, direction, Color.blue);
	// Did we hit anything?
	if (Physics.Raycast (transform.position, direction, hit, range)) {
		// Apply a force to the rigidbody we hit
		if (hit.rigidbody)
			hit.rigidbody.AddForceAtPosition(force * direction, hit.point);
		
		// Place the particle system for spawing out of place where we hit the surface!
		// And spawn a couple of particles
		if (hitParticles) {
			hitParticles.transform.position = hit.point;
			hitParticles.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
			hitParticles.Emit();
		}

		// Send a damage message to the hit object			
		hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
		Debug.Log("HIT " + hit.collider.name);
	}
	
	bulletsLeft--;

	// Register that we shot this frame,
	// so that the LateUpdate function enabled the muzzleflash renderer for one frame
	m_LastFrameShot = Time.frameCount;
	enabled = true;
	
	// Reload gun in reload Time		
	if (bulletsLeft == 0)
		Reload();			
}

And this script on my zombie:

function ApplyDamage (damage : float) {
healthPoints -= damage;
if (Time.time > gotHitTimer && painBig && painLittle) {

		if (healthPoints < maximumHitPoints * 0.2 || damage > 20) {
			audio.PlayOneShot(painBig, 1.0 / audio.volume);
			gotHitTimer = Time.time + Random.Range(painBig.length * 2, painBig.length * 3);
		} else {
			// Play a small pain sound
			audio.PlayOneShot(painLittle, 1.0 / audio.volume);
			gotHitTimer = Time.time + Random.Range(painLittle.length * 2, painLittle.length * 3);
		}
	}
	if (healthPoints <= 0.0)
		Die();
}

Could anyone tell me why this is not working?
My character and the zombie both have a character controller. The Debug.DrawRay doesn’t appear to do anything, but the gun does fire!

// attach this script with your gun and put an empty game object as a child of gun which work as spawn point of bullet

public class AutoFire : MonoBehaviour {

public float frequency = 10;
public float coneAngele = 1.0f;
public bool firing = false;
public float hitSoundVolume = 5f;
public GameObject muzzleFlash;
public AudioClip soundHit;
private float _lastFireTime = -1;
private RaycastHit _hitInfo;
private Quaternion _coneRandomRotation;
private Vector3 _force;
private GameObject _bullet;
private Transform _spawnPoint;
RaycastHit hitInfo;
void Start () {
	if(muzzleFlash) muzzleFlash.active = false;
    _force = new Vector3(0,0,0);
	_bullet=Resources.Load("Prefabs/bullet", typeof(GameObject))as GameObject;
	if(!_bullet){
		Debug.LogError("keep bullet prefab in Resources/Prefabs/bullet");
	}
	foreach(Transform tr in transform){
		if(tr){
			_spawnPoint=tr;
		}
	}
}

// Update is called once per frame
void Update () {
    if (firing) {
        if (Time.time > _lastFireTime + 1 / frequency) {
            //coneRandomRotation= Quaternion.Euler (Random.Range(-coneAngele, coneAngele), Random.Range(-coneAngele, coneAngele),0);
            _coneRandomRotation = Quaternion.Euler(0, 0, 0);
            GameObject go= Instantiate(_bullet,_spawnPoint.position,Quaternion.Euler(Vector3.zero)) as GameObject;
            SimpleBulletOrMissile bulletOrMissile = go.GetComponent<SimpleBulletOrMissile>();
            _lastFireTime = Time.time;

          	Physics.Raycast (go.transform.position, go.transform.up,out _hitInfo,Mathf.Infinity,-5);
            if (_hitInfo.transform)
            {
                print(_hitInfo.transform.tag+"hitted");
                Health targetHealth = _hitInfo.transform.GetComponent<Health>();
                if (targetHealth)
                {
                    //kill or health damage of target
                }

                if (_hitInfo.rigidbody)
                {
					//if want to apply force on enemy
                    hitInfo.rigidbody.AddForceAtPosition(_force, hitInfo.point, ForceMode.Impulse);
                }
              
                AudioSource.PlayClipAtPoint(soundHit, _hitInfo.point, hitSoundVolume);
               
                bulletOrMissile.dist = _hitInfo.distance;
                
               
            }
            else {
                
                    bulletOrMissile.dist = 50;
            }
        }
        
    }
	if(Input.GetMouseButton(0)){
		OnStartFire();
	}
	if(Input.GetMouseButtonUp(0)){
		OnStopFire();
	}
}

void OnStartFire() {
    if (Time.timeScale == 0)
        return;

    firing = true;
	if(muzzleFlash) muzzleFlash.active = true;
    if (audio) audio.Play();
}

void OnStopFire() {
    firing = false;
	if(muzzleFlash) muzzleFlash.active = false;
    if (audio) audio.Stop();
}

}

//attach this script with bullet

public class SimpleBulletOrMissile : MonoBehaviour {

public float speed = 10;
public float lifeTime = 0.5f;
public float dist = 100;

private float _spawnTime = 0.0f;
private Transform _tr; 
// Use this for initialization
void OnEnable () {
    _tr = transform;
    _spawnTime = Time.time;
}

// Update is called once per frame
void Update () {
    _tr.position += _tr.forward * speed * Time.deltaTime;
    dist -= speed * Time.deltaTime;
    if (Time.deltaTime > _spawnTime + lifeTime || dist < 0) {
      //  print("Destroy form bullet");
       Destroy(gameObject);
    }
}

}

Ok, I’ve fixed it - the gun was in a weird rotation so I made the ray cast originate at the parent gameobject instead.