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