C# Overridable Methods

Maybe this is a silly question, so apologies up front if it is.

If some methods (say FixedUpdate) are overridable methods, why don't I see their virtual declarations anywhere in the metadata for the hierarchy chain (MonoBehaviour > Behaviour > Component > Object)?

They aren't actually overridable. What happens is the engine uses reflection to find them all in your scripts at creation, then invokes the stored references at runtime

It also means that scripts that don't have an Update (or any other) method don't need to have it called at runtime - that means it's a bit faster as it doesn't have to call every function in every script from the native engine

This is a bit of a design mistake on our end. They are called trough reflection, so we only call the methods on objects that actually have the method. We should have made the methods be virtual in the MonoBehaviour basetype though, so you get nicer autocompletion etc. I would love to correct this situation, but the problem is that if we do, we would break pretty much all c# scripts out there, as you'd have to rewrite

void Update()


override void Update()

maybe we'll do it one day when we have the capability to automatically make changes like these for you, but that day is not in the near future