Но это сразу звоночек: если где-то появился даункаст, значит неправильно выстроен полиморфизм
да, я бы даункастил, но в этолм обстрактном классе CharacterController мне нужно объявить некоторый функционал которое будет наследоваться. и Вот в этом функционале я не могу получить напрямую M.Instance, есть вариант с приведением типов через switch например, но это выглядит как-то быдлянски