script to change material, stop working after a time

Hi,
I made a very basic script to change player mnaterial with wall materila when it is trigger:

public class TakeColor : MonoBehaviour {

    Renderer skin;
    Material defaultMaterial;
    // Use this for initialization
    void Start () {
        skin = GetComponent<Renderer>();
        this.defaultMaterial = skin.material;
    }
   
    // Update is called once per frame
    void Update () {
       
    }

    private void OnTriggerEnter(Collider other)
    {
        if (other.name != "Floor" && other.name != "Cameleon PlaceHolder")
                   StartCoroutine(ChangeColor( (other.gameObject.GetComponent<Renderer>()).material));
    }

    private void OnTriggerExit(Collider other)
    {
        if (other.name != "Floor" && other.name != "Cameleon PlaceHolder")
            StartCoroutine(ChangeColor( defaultMaterial));
    }


    private IEnumerator ChangeColor( Material newItem)
    {
        skin.material = newItem;
        yield return new WaitForSeconds(1f);
       
    }

}

as you can see not a rocket sience and yet after few material change it stop doing it job.
some one knows why?

Tried to reproduce this error in my Unity with no wrong results.
Material color changes with no problems.

Can you give more details?

thx for response.
I will do even more, here is video on YT:

changed script in coment.

I find answer, kind of… the event exit start even if i didn’t exit this colider.
I find walk around here:

I change rigedbody to kinematic.