Rzuciłem tylko oko na jeden plik ModeManager.cs i widzę tam bardzo dużo powtórzeń kodu. Dużo programistów myśli, że należy dbać tylko o brak powtórzeń całych bloków skomplikowanej logiki, a w rzeczywistości należy nawet unikać powtarzania pojedynczych zmiennych. Ja bym tryby gier trzymał w słowniku gdzie kluczem byłaby nazwa trybu. Wtedy przy wyborze trybu wystarczy ustawić inactive na wszystkich wartościach ze słownika, a do wybranej ustawić active. Pewnie można byłoby jeszcze lepiej to załatwić, ale nie znam Unity i C#.