title: How do the Unity private awake update and start methods work?
body: <p>How does Unity call the Awake, Update, and Start methods behind the scene?  That they have no access modifier to me indicates they are private methods, and they don't use anything like new or override, so how does the Unity framework find the methods to call them?</p>
  
  <p>On a related question, is there any particular reason virtual methods were not used?</p>
  
  <p>Edit:  For those unfamiliar with Unity scripts, this is how they generally appear:</p>
  
  <pre><code>public class MyClass : MonoBehaviour{
     void Start(){
     }
  
     void Awake(){
     }
  
     void Update(){
     }
  }
  </code></pre>
  
  <p>What I don't understand is how the framework finds and automatically calls those methods for each script when, by all appearances, they look to just be private methods</p>