【Unity】Updateメソッドとは?フレーム毎に実行される処理

Updateメソッドとは? Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「UnityのUpdateメソッドってなに?」

「Updateメソッドをどうやって使えばいいのかわからない。」

というお悩みの方に向けた内容となっています。

Updateメソッドは、Unity上でフレーム毎に呼び出されるメソッドで、ゲーム内で行われる処理の多くは、このUpdateメソッドの中に書いていくことになります。

キャラクターを移動させたり、オブジェクトに変化を与える処理などは、ゲームのフレーム単位でそれぞれの処理を加えていくことになるため、このUpdateメソッドが非常に重要になってきます。

ただし、Updateメソッドは常に繰り返し処理が行われることになるため、負荷が大きい処理はできるだけ避けて書いていく必要があります。

そこで、このページでは、UnityのUpdateメソッドについて、仕様や特徴、また使い方を紹介していきます。

なお、このページでは、

Windows11
Unity Hub3.11.1
Unity6

のバージョンで解説しています。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

Updateメソッドとは?

まずは、Updateメソッドがどんな特徴なのかをまとめていきます。

フレーム毎に呼び出されるメソッド

Updateメソッドは、Unity側で定義されているメソッドで、ゲームのフレーム毎に呼び出されるイベント関数となっています。

ゲームは、静止画(フレーム)が1秒間に何枚も切り替わることで、ゲーム内での動きを表現することができています。

そして、この切り替わるフレーム毎にUpdateメソッドが呼び出されて、ゲーム内での処理が行われています。

なお、フレームが1秒間に何枚切り替わるかの設定は、フレームレートを決めることで変更することができるので、知りたい方は以下のページも参考にしてみてください。

定期的に行う処理を書いていく

Updateメソッドは、定期的にゲーム内で加えたい処理を書いていくことになります。

例えば、キャラクターの移動やオブジェクトの変化、他にもキー入力の操作や敵の攻撃などのような処理です。

これらの処理は、フレーム単位で自動で行われるようにしたいので、Updateメソッド内に書くことで処理が定期的に行われていきます。

FixedUpdateやLastUpdateというメソッドもある

Updateメソッドと同じような名前のメソッドとして、

というメソッドがあります。

FixedUpdate

FixedUpdateとは、設定した秒数単位で呼び出されるメソッドになっています。

具体的には、FixedUpdateの「Fixed Timestep」で1フレーム毎の時間を設定することができ、その時間ごとにFixedUpdateメソッドが呼び出されます。

FixedUpdateがよく使われる場面として、物理演算を用いた処理を行う際に使われます。

Updateメソッドでは、物理演算を用いた際にデバイスによってカクカクしてしまう可能性がありますが、FixedUpdateは常に一定の時間で呼び出されることになるので、描写が安定します。

ただし、キー入力操作などでは、入力の検知ができない場合が生じてしまうため、注意しておきましょう。

LateUpdate

LateUpdateとは、Updateメソッドと同じくフレーム毎に呼び出されるメソッドですが、Updateメソッドよりも後に呼び出されて処理が行われます。

もう少し詳しく言うと、複数のスクリプトにUpdateメソッドが書かれている場合、それぞれのUpdateメソッドの処理が行われる順番はランダムになっています。

そこで、LateUpdateを使うことで、他のスクリプトのUpdateメソッドよりも後で処理を行うことができるようになっています。

LateUpdateは、カメラを動かすような処理の際に使われていることが多いです。

Updateメソッドの使い方

ここからは、Updateメソッドの使い方についてまとめていきます。

MonoBehaviourクラスを継承する

まず、Updateメソッドを使うためには、UnityのMonoBehaviourクラスを継承する必要があります。

継承とは、クラス内の変数やメソッドを別のクラスに引き継ぐ機能のことで、UpdateメソッドはUnityの中でMonoBehaviourクラスに定義されているため、継承して派生クラスを作る必要があります。

using UnityEngine;

public class クラス名 : MonoBehaviour  // MonoBehaviourクラスを継承する
{
}

MonoBehaviourから継承を行う際は、上記の3行目のクラス作成の際に、クラス名の後ろに「:」を付けてMonoBehaviourと書いてあげることで、継承させることができます。

なお、僕の使っているUnity6では、スクリプト作成の際に自動的にMonoBehaviourクラスを継承することができるようになっているので、その場合はこの作業は必要ありません。

Update()でメソッド内に処理を書いていく

MonoBehaviourクラスの継承ができたら、スクリプト内にUpdateメソッドを書いていきます。

Updateメソッドは返り値が無いメソッドになるので、

using UnityEngine;

public class Test : MonoBehaviour  // MonoBehaviourクラスを継承する
{
    void Update()    // Updateメソッドを作る
    {
        // Updateメソッドの処理内容を書く
    }
}

と、5行目のようにvoid型で書くことで、Updateメソッドを使うことができます。

これで、Updateメソッドの{}内に書いた処理が、フレーム毎に行われるようになります。

なお、メソッドの作り方については、以下の記事でも詳しくまとめていますので、参考にしてみてください。

まとめ

このページでは、UnityのUpdateメソッドについて、どんな仕組みや特徴なのか、また使い方についてまとめていきましたが、いかがでしたでしょうか?

Updateメソッドは、ゲーム内でフレーム毎に呼び出されるメソッドです。

定期的に行うような処理、例えばオブジェクトの移動や変化、キー入力判定などの処理をUpdateメソッド内に書いていくことになります。

Updateメソッドには、他にもFixedUpdateLateUpdateというメソッドがあり、それぞれ処理が行われるタイミングによって分かれています。

最後までお読みいただきまして、ありがとうございました!

コメント