Главная причина этого в том, что C # компилируется в IL-сборку, которую можно кросс-компилировать в несколько различных форматов на разных платформах.
Проблема в том, что в настоящее время то же самое можно сделать в C ++ с использованием emscripten и Clang, но я предполагаю, что в то время, когда были выпущены первые версии Unity, эти технологии были недоступны, поэтому я полагаю, что они выбрали C # из-за кода IL, и другие причины, и решение застряло. Unity также поддерживает проект IL2CPP, целью которого является кросс-компиляция байт-кода IL в код C ++, который затем компилируется в сборку. Это позволяет использовать C # на многих других платформах, и я думаю, что IL2CPP используется по умолчанию на iphone.