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よりも先に呼び出される、という理解で構いません。

UpdateとFixedUpdateの違い

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

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

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