起こったこと
2Dのとあるゲームのプロジェクトをダウンロードした時に、「Type `UnityEngine.Component' does not contain a definition for〜」みたいなエラーが複数のスクリプトファイルからエラーが出た。 うん、コンポーネント取得してないぞゴラァ!って言われたわけです。 エラー自体は簡単に解決できるものだが、コンポーネント取得しなくても動きますよ感のあるコードだったので草が生えたわけです。原因
Unity5より前はGetComponentしなくても動いてたらしい。だから、古いサンプルがそのような状態であっても不思議じゃない。どのように対処したか
Unity5より前はGetComponentしなくても動くらしくて、拾ってきたプロジェクトのスクリプトはこんな感じで書かれていた。I_am_hentai_before.cs
rigidbody2D.velocity = transform.up.normalized * speed;
Unity5より前ではこれで動いていたみたいだが、Unity5以降ではGetComponentしましょう。
I_am_hentai_after.cs
GetComponent<Rigidbody2D>().velocity = transform.up.normalized * speed;
これでここのスクリプトのエラーは消える。 他のスクリプトのエラーも原因は同じだったので、上記のようにGetComponentしたらエラーは消えた。
最終的には処理のたびにコンポーネント取得はよくないので、実際はStart関数でGetComponentした方がいいです。(このゲームの場合は)