StartとUpdateについて

UnityでC#スクリプトを新しく作ると、最初からStartメソッドとUpdateメソッドというのが書かれています。ここではそれらのメソッドの役割と、似たような他のメソッドとの違いについて説明します。


※この記事で使用しているUnityのバージョン:Unity2019.1

Startメソッドについて

まずStartメソッドについてですが、これは後述のUpdateメソッドが最初に呼び出される前に1回だけ呼び出されるメソッドです。

シーンが始まった時に変数を初期化したり、他のゲームオブジェクトやスクリプトをキャッシュ(=参照を取得して変数に入れておくこと)したりするときに活躍します。

Updateメソッドについて

次にUpdateメソッドですが、こちらは1フレームに1回呼び出されるメソッドです。1フレームごとに実行したい処理(例えば入力受付など)を行うのに使われます。

頻繁に呼び出されるので、当たり前ですが重い処理はなるべく行わないようにする必要があります。

StartとAwakeの違い

ところで、Startメソッドに似たメソッドとしてAwakeというのもあります。両者の違いは呼び出されるタイミングで

  • Awake:
    スクリプトのインスタンスがロードされた時に1回だけ呼び出される。つまり、呼び出されるタイミングは必ずStartメソッドよりも前
  • Start:
    最初にUpdateメソッドが呼び出される前に1回だけ呼び出される。実行は全てのAwakeの処理が終わってから

というような感じになっています。単純にAwakeのほうがStartよりも先に呼び出される、という理解で構いません。

ちなみに余談ですが、Awakeで何か処理を行う時は注意が必要です。というのも、複数のスクリプトにAwakeがある場合、どのAwakeがどの順番で呼び出されるかはランダムだからです。したがってAwakeでは他のゲームオブジェクトやスクリプトへの参照は取得できますが、その中身(値など)はまだ読み込まれていない可能性があるので値を取得しようとするとエラーが出ることがあります。注意しておきましょう。

UpdateとFixedUpdateの違い

また、Updateと似たようなメソッドしてFixedUpdateというメソッドもあります。両者の違いについては「リジッドボディ(Rigidbody)の使い方」で説明した通りで、端的に言うと呼び出されるタイミングが違います。

  • Update:1フレームに1回呼び出される。呼び出される間隔はバラバラ
  • FixedUpdate:常に決まった間隔(例えば0.02秒ごと等)で呼び出される

このような性質の違いがあるため、原則として入力の受付はUpdate内、物理演算(=リジッドボディの処理)はFixedUpdate内で行う必要があります。