【Unity初心者向け】 Update と FixedUpdate の使い方

Unity
スポンサーリンク

こんにちは。ゆきのもりです。

ゲームのエンジニアを経験して4年くらいになります

イケメン
イケメン

Update関数ってなんだ? どう使うんだ?

今日はそんな疑問にお答えしようと思います

【Unity初心者向け】 Update と FixedUpdate の使い方

Unityの参考書などを見ていると出てくる「Update」「FixedUpdate」について解説します

Update関数

はじめにUpdate関数について解説します

Update関数とは?

おおよそ0.03秒ごとに自動的に実行される関数です

公式のドキュメントはこちら

public class ExampleClass : MonoBehaviour {

詳しい使用条件をいえば、こんな感じでMonoBehaviourというクラスを継承していれば使えますが、まあ、初心者はほぼ全部のクラスで使える、と思ってもらって大丈夫です

0.03秒というのは本当にすごくとってもおおよそです

説明の都合上、簡潔に「0.03」としましたが正確には一定ではないため注意してください。というか、かなりブレます

この関数についてより正確に説明すると、0.03秒ごとではなく「1フレームごと」となります

とはいえ、フレームレートに関してはパソコンの性能に依存して変化するため、これという秒数を断言することは出来ません

なお、Unityのフレームレート設定に関してはこちらに詳しい説明があります

使用例

Updateのよくある用途は定期的に実行する処理です

例えばこんな感じですね

    private float time;

    void Update() {
        time += Time.deltaTime;
        if (time >= 1.0) {
            // ここに1秒ごとに実行したい処理を書く
            time= 0.0f;
        }
    }

Time.deltaTimeには前回Updateを実行した時刻から、今回Updateを実行した時刻までの経過時間が格納されています

ifの条件式によって1秒以上の時間が経過したとき、if内の内側が実行されるという処理が作れます

前述の通り、Updateの実行周期はかなりまばらであるため、この処理で作れるのは「おおよそ1秒間隔」の処理である点に注意です

FixedUpdate関数

はじめにFixedUpdate関数について解説します

FixedUpdate関数とは?

確実に0.02秒ごとに自動的に実行される関数です

公式のドキュメントはこちらです

こちらは確実に0.02秒ごとに実行されるのが特徴です

正確な入力が求められるアクションや音ゲーなどでは利用機会が多いかもしれませんね

なお、0.02秒という周期を意図的に変更することもできます(詳しくはドキュメント参照)

ただし、便利だからといってこちらに処理を詰め込みすぎると、衝突判定や描画に影響が出てしまいます

作るゲームの特性を考えて必要最小限の利用にとどめましょう

使用例

使用方法はUpdateとまったく同じです。こちらも周期処理に使用することが多いです

    private float time;

    void FixedUpdate() {
        time += Time.deltaTime;
        if (time >= 1.0) {
            // ここに1秒ごとに実行したい処理を書く
            time= 0.0f;
        }
 

Updateと内容は同じなので説明は省略します

FixedUpdateは確実な0.02秒周期となるため、より正確な「1秒」を計測できます

まとめ

UpdateおよびFixedUpdateのまとめです

目的に応じて次のように使い分けると良いでしょう

  • 簡単な周期処理 → Update関数
  • 厳密な周期処理 → FixedUpdate関数

以上です!ではまた!

コメント