Мне кажется, я понимаю ваш подход.
Это часто встречается в играх, потому что у вас есть бесконечное количество эффектов, статуса, поведения и т. Д., Потенциально.
Что я вижу в вашей проблеме, так это то, что вы больше имеете дело с такими функциональными вещами, как «это следует за этой мышью», «это отвечает на команды клавиатуры» и т. Д ...
В этом случае вы можете создать функциональные классы, такие как MouseFollower или KeyboardResponder, которые в общем случае принимают GameObject в качестве аргумента своего конструктора.
Эти объекты могут затем применять обработчики событий непосредственно к GameObject, например, списки событий.
Вы можете хранить все свои функциональные объекты в массиве внутри GameObject на случай, если вам потребуется их удалить.
Когда они находятся в массиве, вы также можете создать классный интерфейс с единообразным набором методов. Так, если, например, GameObject был сделан неактивным или отключенным, вы могли бы сказать
for each IFunctionalObject in GameObject.FunctionalObjects
IFunctionalObject.disable()
Я полагаю, что этот подход был бы приемлемым, если бы у вас было действительно огромное разнообразие игровых объектов, и я полагаю, что RPG был бы достойным примером, когда вы управляете огромным количеством спрайтов различной функциональности.