質問: MonoBehaviourを継承してAwake、Start、Updateという関数を作るとUnity側で勝手に呼んでくれますが、これはどういう仕組みで動いているのでしょうか? 最初、MonoBehaviour側にvirtualな関数、もしくはabstractな関数で定義されているのかとも思ったのですが、overrideしなくても書けますし、定義を書かなくてもコンパイルエラーにならないので、そういうわけでもないんですよね? どういう仕組なのか、非常に不思議に思っています。 ご教授お願い致します。 ちなみに、私、C++にはある程度精通していますがC#歴は浅いです。
回答: いろいろ調べてみたところ、以下のようなことがわかりました。 スクリプティングランタイム(Mono・IL2CPP)によって Update()やStart()など特定のメソッドが定義されているかを調査され、MonoBehaviourが特定のメソッドを持っていたら所定のリストに組み込まれるようです。 ゲーム中はこのリストからメソッドが呼ばれている、というものだそうです。 この情報はUnity公式ブログに記載されていた情報なので信頼できるソースだと思います。 詳しくは以下のリンクを参考にしてみてください。 Update()を10000回呼ぶ 余談ですが、私自身この記事を見るまでSystem.Reflectionを使って何かしらしてるんじゃないかな、と思っていました。