Part.1はこちら
Part.2はこちら
Part.3はこちら
Part.4この記事
Unity4.18f1を使っています。
Update()間の経過時間
これまで見てきた通り、Update()は不定期に呼び出されます。
基本的にUnityで設定したfpsに近づけようとはしますが、負荷が大きくなれば当然呼び出すことはできません。
特に環境から受ける影響は大きく、そもそもUnityの初期設定すらディスプレイ(GPU)に依る設定になっています。
その不定期なUpdate()で前のUpdate()からの時間(つまりフレーム間の経過時間)をTime.deltaTimeで取得することができる。経過時間さえわかればfps・・・つまり環境に依存しない時間当たりの処理をすることができる。
マニュアル的には固定フレームレートで呼び出すMonoBehaviour.FixedUpdate()を利用することも提案している。
まとめ
- UnityEngine.MonoBehaviour.Update()は毎フレーム呼び出されるメソッド
- 呼び出される回数はfpsに依存し、基本的に秒間20回以上は呼び出される(べき)
- 呼び出す回数が多いので負荷の少ない軽い処理のみを記述する
- 呼び出す回数が多いので不必要なオブジェクトは削除する
- 呼び出す回数が多いので非アクティブ状態を利用し呼び出しを避ける
- Time.deltaTimeによって不定期な呼び出しに対応することができる
最後少し走ってしまいましたが、公式のスクリプトリファレンスに沿って記述してみました。
勉強段階で正確なことかはわかりませんが、僕が思うに。Update()を利用することでUnityのメイン処理へ各スクリプトからアクセスをする。
必要なタイミングでUpdateから重い処理を呼び出す。というのがUnityの基本になってくるのかなと感じています。
今回はチャレンジ要素が強く、特にPart2ではほぼgif画像で説明するという形をとってみました。恐らく過剰なのを感じているので、機会があるときに校正したいと思います。