Unintentional Occasional Collision

I’m working on a game where you try not to run into obstacles. I have main issue with it however, and that is that some instantiated clones that the player collides with don’t activate OnCollisionEnter() on either script. (I have a different script with OnCollisionEnter() on the player and the obstacle, and neither are activated.) Why is it doing this? Again I don’t think it’s an issue with a single piece of code, seeing as I have two separate scripts with OnCollisionEnter(), and neither of them are being called.

Thanks a Million!

Player Code:
public class Player : MonoBehaviour
{
public GameObject button;

    public Rigidbody rb;

    public MeshRenderer render;

    public GameObject particles;

    public Material material;

    float jumpSpeed = 15;
    float moreGravity = 13;
    float gravityMultiplier = 6;
    float jumpLength = 0;
    float torque=1000;

    public bool jump = false;
    public bool gamePlaying = true;
    bool madeFaster = false;
    bool touchingGround = true;

    private void Start()
    {
        material.color = Random.ColorHSV();
        render.enabled = true;
        Physics.gravity = new Vector3(0, -9.81f * gravityMultiplier, 0);
    }
    void Update ()
    {
        if (gamePlaying == true)
        {
            if (touchingGround == true)
            {
                if (jumpLength <= 8)
                {
                    if ((Input.anyKey && button.GetComponent<Button>().touchingButton == false)  || jump)
                    {
                        if (jumpLength == 0)
                            rb.AddTorque(-1*torque,0f, 0f);
                        rb.velocity = new Vector3(0,1,0)* jumpSpeed;
                        jumpLength++;
                    }
                    else if (jumpLength > 0)
                        touchingGround = false;
                }
                else
                touchingGround = false;

            }
            if (touchingGround == false)
            {
                if (rb.velocity.y < -0.1 && madeFaster == false)
                {
                    Physics.gravity = new Vector3(0, moreGravity * -1 * gravityMultiplier, 0);
                    madeFaster = true;
                }
            }
        }

    }

    private void OnCollisionEnter(Collision collision)
    {
        touchingGround = true;
        if (collision.gameObject.tag == "Fence" || collision.gameObject.tag == "Rock" || collision.gameObject.tag == "Stump")
        {
            gamePlaying = false;
            Colapse();
        }
        if (collision.gameObject.name == "Ground")
        {
            jumpLength = 0;
            Physics.gravity = new Vector3(0, -9.81f * gravityMultiplier, 0);
            madeFaster = false;
            rb.rotation = Quaternion.identity;
        }

    }
    void Colapse()
    {
        render.enabled = false;
        Quaternion rotation = new Quaternion();
        rotation.x = 0;
        rotation.y = 0;
        rotation.z = 0;
        Destroy(Instantiate(particles, rb.position, rotation), 2);
    }
}

Cloned Obstacle Code:
public class ObsticleClone : MonoBehaviour
{

    public GameObject obsticle;
    public GameObject particles;
    
    public bool changedScore = false;

    float time;
    public float speed;

    private void Start()
    {
         particles = obsticle.GetComponent<Obsticle>().particles;
        speed = obsticle.GetComponent<Obsticle>().speed;
    }

    void Update ()
    {
        if (name == "Obsticle")
        {
            time = obsticle.GetComponent<Obsticle>().time;
            this.gameObject.transform.position = new Vector3(gameObject.transform.position.x, gameObject.transform.position.y, gameObject.transform.position.z + speed + (time / 200f));
            if (gameObject.transform.position.z >= 14.17f)
            {
                obsticle.GetComponent<Obsticle>().clone = true;
                Destroy(this.gameObject);
            }
            if (gameObject.transform.position.z >= 8.78f && !changedScore)
            {
                changedScore = true;
                obsticle.GetComponent<Obsticle>().score++;
            }
        }
    }

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.name == "Player")
            Colapse();
    }

    void Colapse()
    {
        Renderer r = this.GetComponent<Renderer>();
        Collider c = this.GetComponent<Collider>();
        c.enabled = false;
        r.enabled = false;
        Destroy(Instantiate(particles, this.gameObject.transform.position, this.gameObject.transform.rotation), 2);
        Destroy(this.gameObject);
    }
}

Again, thank you so much!

Do the “ObsticleClone” GameObjects spawn with Colliders? I see you’re trying to access a Collider in the “Colapse” method but I can’t see them being added to the GameObject anywhere.