How exactly do Monobehaviour functions work?

So I’ve used functions like Awake, FixedUpdate, OnTriggerEnter and whatnot for some time now, but I’m not sure I fully understand how those functions work on a larger scale. I notice that they don’t need to be tagged as “new” or “override”. And it will compile and function properly regardless of whether one of these functions is actually implemented in a custom script.

What’s going on with these functions, exactly? How do these built-in functions fit into the larger picture of object-oriented programming?

I’m not 100% sure that this is how they work or that I fully understand your question, but this is how I would do it and it seems to be the most logical…

When an event happens in the Unity world, ie.(the game starts), Unity goes through each script in the game that is attached to a game object and calls the corresponding function for that event.

In this case, the corresponding function for the game/scene starting would be Awake() or Start(). The Update() function would correspond to the passing of a single frame.

From what I understand, those are called using the message system in Unity. For example, by using GameObject.SendMessage or the other related methods (BroadcastMessage, SendMessageUpwards). I don’t know exactly what the internal implementation of it is, but I’ve always assumed it’s using some kind of reflection.