Coroutines work just fine on GameObjects and they're used very frequently. I've read that many games have very little code in the Update functions as all the animation/etc code is done via coroutines. I'd spawn a coroutine, change or toggle the material of the object, and have the coroutine increment a counter, sleep, and then yield. When the counter hits a certain value, stop yielding and the coroutine will exit. One of the first tutorials I did suggested using coroutines for anything that has a defined stop condition. Anything that needs to sleep will also need to be in a coroutine. They're very handy, get used to them.