Unityのイベント関数がよく分からない

Last Update: 2019-09-08

Unityをやっていてよく分からないのがイベント関数。

ゲーム実行中の特定のタイミングで呼ばれるメソッドであることは分かる。AndroidでいえばActivityのonCreateとかみたいなもんだという感じで認識している。

そういうのはわかっているのだけど、UnityのStartとかUpdateとかは、MonoBehaviourで定義されているメソッドをオーバーライドしているのか、なにかしかのインターフェースで定義されたメソッドを実装しているのか、という意味でよく分からない。

私はUnityよく分かってない、C#もよく分かっていない人である。ただ、これらのStartとかUpdateはメソッドをオーバーライドしているわけではないと思っている。確かC#ではメソッドのオーバーライドにはoverrideを書かないとダメだったはず。だからオーバーライドではないと思う。

オーバーライドではないけど、同じメソッド名を定義することはできる(らしい)から、多分それなんだろうけれども、何だかよく分からない。

なんでそんなことを気にしているのかというと、スクリプトを書くときに困るからである。StartやUpdateくらいなら別にいいのだが、OnCollisionEnter2Dとか長いメソッド名を使う時とか、使ったことないイベント関数を使いたい時に困る。

私はビルトインのMonoDevelopでコードを書いている。最近はMacでやっているので、Visual Codeを使ってみたり、Xamarin Studioを入れてみたりしたけど、なんかややこしいので結局ビルトインのものを使っている。

で、このMonoDevelopがこれらのイベント関数を補完してくれない。手入力するしかないのだけど、そんなことしてたらタイポが怖い。使ったことないやつはマニュアルを読まないと存在が分からない。

これがAndroid Studioであれば、Alt+Enterでオーバーライドから使えそうなメソッドを探してオーバーライドするなんてことができるのに、Unityではできないのがとてもストレスだ。といっても、まあ本当にストレスに感じるほどにスクリプトを組んでいるわけではないのだけども。少なくとも気持ち悪さは感じている。

Unityはソースコードが公開されていないので、誰がどのようにしてこれらのイベント関数を呼び出しているのか調べられない。どういう実装のされ方されているのだろう。

考えてもしかたが無いので、そういうもんだと考えないようにしているけれども。WindowsでVisual Studio使ったら、このあたりのイベント関数もコード補完してくれるんだろうか。