Зависло, потому что юнити работает в одном потоке и вы его зациклили в while (scoreBonus == true). А корутина начнёт работать только когда ваш вызов метода OnMouseDown завершиться. Соответственно проверки надо делать в Update
Либо ты знаешь математическую зависимость и можешь рассчитать каждый пиксель (по сути нужен цвет пикселя) в любой момент времени между формой круг и квадрат, и тогда ты пишешь шейдер.
Либо не выпендриваться и сделать покадровую анимацию. Судя по твоему примеру хватить 3-4 кадров.