Ele poderia simplesmente definir os métodos como abstratos na classe base MonoBehaviour e forçar as subclasses a implementá-las.
Uma das vantagens do sistema que o Unity usa é que você não precisa implementar todas as mensagens do MonoBehaviour, das quais existem mais de 60 .
Normalmente, precisamos apenas de um ou alguns desses métodos. Como alguns são específicos da física 2D / 3D, outros exclusivos para câmeras ou sistemas de partículas, é altamente improvável que qualquer script precise de todos eles.
Ao deixar as mensagens que não precisamos como não implementadas, podemos sinalizar claramente para o tempo de execução "nem se preocupe em chamar OnCollisionStay2D nesse objeto - não preciso disso"
Isso pode ser um ganho substancial em eficiência. Agora, o mecanismo pode filtrar uma lista curta para chamar Atualização apenas nos ~ 20 objetos em minha cena que precisam de lógica de atualização personalizada a cada quadro, e nem todos os ~ 200 objetos que compõem todo o cenário ou respondem apenas a eventos de física.