AI walk through solid walls

The AI in my FPS walk right through solid walls, I’ve box colliders, mesh colliders, rigid bodies but I can’t get them to not walk through solid walls.
Please help me out.

This is my AI script.

var distance;
var target : Transform;    
var lookAtDistance = 15.0;
var stopDistance = 3;
var moveSpeed = 5.0;
var damping = 6.0;
 
var damage:float = 17;
var range = 100.0;
var force = 10.0;
var muzzleFlash : Renderer;
var muzzleLight : Light;
 
 
var Health = 100;
var deadReplacement : Transform;
var dieSound : AudioClip;
 
static var isDead = false;
 
static var allowfire : boolean = true;
 
function Start (){
muzzleFlash.enabled = false;
muzzleLight.enabled = false;
allowfire = true;
}
 
function Update () {
    target = GameObject.FindWithTag("Player").transform;
    distance = Vector3.Distance(target.position, transform.position);
 
    if((distance < lookAtDistance)){
    lookAt ();
    }
    if(allowfire == true){
    fire();
}
}
 
 
function lookAt (){
    var rotation = Quaternion.LookRotation(target.position - transform.position);
    transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * damping);
    transform.Translate(Vector3.forward * moveSpeed *Time.deltaTime);
    animation.Play("walk");
}
 
function ApplyDammage (TheDammage : int)
{
    Health -= TheDammage;
 
    if(Health <= 0)
    {
       Dead();
    }
}
 
function Dead () {
    // Destroy ourselves
    Destroy(gameObject);
    Destroy(transform.parent.gameObject);
 
    // Play a dying audio clip
    if (dieSound)
    AudioSource.PlayClipAtPoint(dieSound, transform.position);
}
 
static function CopyTransformsRecurse (src : Transform,  dst : Transform) {
    dst.position = src.position;
    dst.rotation = src.rotation;
 
    for (var child : Transform in dst) {
       // Match the transform with the same name
       var curSrc = src.Find(child.name);
       if (curSrc)
         CopyTransformsRecurse(curSrc, child);
    }
}
 
function fire(){
allowfire = false;
audio.Play();
 
var direction = transform.TransformDirection(Vector3.forward);
var hit : RaycastHit;
 
// Did we hit anything?
if (Physics.Raycast (transform.position, direction, hit, range)) {
Debug.DrawRay(transform.position, direction * range, Color.green);
// Apply a force to the rigidbody we hit
if (hit.rigidbody)
hit.rigidbody.AddForceAtPosition(force * direction, hit.point);
hit.collider.SendMessageUpwards("ApplyDamage", damage, SendMessageOptions.DontRequireReceiver);
}
 
muzzleFlash.renderer.enabled = true;
muzzleLight.enabled = true;
yield WaitForSeconds (0.04);
muzzleFlash.renderer.enabled = false;
muzzleLight.enabled = false;
 
 
yield WaitForSeconds(0.3);
allowfire = true;
}
 
function OnTriggerEnter(hit:Collider){
if(hit.tag == "Player"){
hit.transform.SendMessage("Damage",damage);
}
}

You are moving with Translate which does not consider collision unless you make the code for it. You should go for the Character Controller.

this has a tutorial with what is about t become the old Character Controller since Unity is developing a new version. But that should get you going.