Not Detecting Collision

I realize this has probably been asked a lot, but looking around at the other answers doesn’t seem to fix my problem.

I’m trying to make a brick breaker game, so I have a ball that I move with the script. When it collides with one of the walls, I want the wall to delete itself and the ball to stop (for now, later I’ll make the ball bounce, but I want to make sure I can detect the collision first).

This is the script I have so far:

using UnityEngine;
using System.Collections;

public class Ball : MonoBehaviour {

    public float MasterSpeed;
    float angleOfExit;
    float speedX;
    float speedZ;

	// Use this for initialization
	void Start () {

        angleOfExit = Random.Range(0.5f, 89.5f);
        speedX = MasterSpeed * Mathf.Cos(angleOfExit);
        speedZ = MasterSpeed * Mathf.Sin(angleOfExit);
	}
	
	// Update is called once per frame
	void Update () {

        transform.Translate(speedX * Time.deltaTime, 0, speedZ * Time.deltaTime);

	}

    void OnCollisionEnter(Collision collision) {

        Destroy(collision.gameObject);
        transform.Translate(0, 0, 0);
        Debug.Log("Collision");

    }
}

The script is attached to the ball.

All of the walls have box colliders on them, and the ball has a sphere collider. None of them are set to trigger. The problem is that the collision isn’t even detecting. Does anyone know why?

Oh, the walls are all parented to another prefab, so I can create it more easily, would that be an issue?

Script reference: Unity - Scripting API: Collider.OnCollisionEnter(Collision)

“Note that collision events are only sent if one of the colliders also has a non-kinematic rigidbody attached.”