今回はUnityのUpdateメソッドについて解説をしたいと思います!
Updateメソッドはゲーム開発する際に必須のメソッドです。
毎フレームごとに自動で呼び出されるメソッドであるためこのメソッドを使うことで定期的に処理をさせることができます。
この記事を読めば、
・Updateメソッドの使い方
・FixedUpdateメソッドの使い方
・LastUpdateメソッドの使い方
を知ることができます。
また、それぞれ3つのUpdateメソッドの違いが何かを知るための特徴についても解説しています!
ぜひ、最後までご覧ください!
Updateメソッドとは?
使い方
まずUpdateメソッドについてですが、何らかの処理を行いたい時に毎フレーム呼ばれる処理になっています。
そのため、このUpdateメソッドに処理を記述することで毎フレーム呼び出され実行されます。
このメソッドはどういった場所で使われるのでしょうか?
例えばシューティングゲームで言えば敵のキャラクターを動かす処理やボタンやキーの入力の受付などの場面で使われます。
実際に動きとサンプルコードを見てみましょう。
今回はこのようにCubeを配置して赤色のMaterialを用意して色を付けています。
次にソースコードを見てみましょう!
Move.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour { void Start () { } void Update () { transform.position += transform.up * Time.deltaTime; } }
このコードでは上方向(Y軸)にCubeを移動させるサンプルです。
Updateメソッドは毎フレーム呼ばれるため上方向に進み続けるサンプルとなっています。
特徴
Updateメソッドの特徴は先程触れましたが毎フレーム呼ばれるというところが特徴です。
このあと解説するFixedUpdateとは呼ばれるタイミングが違います。
FixedUpdateメソッドとは?
使い方
次にFixedUpdateメソッドについて解説します。
先程のCubeを使いまわしますがソースコードについては次のように変更します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour { void Start () { } void FixedUpdate () { transform.position += transform.up * Time.deltaTime; } }
実際に動かしてみましょう。
あれ・・・?
特に変わりませんか?
実は今回のサンプルでは少し動きが分かりづらいかもしれません。
FixedUpdateメソッドは一定時間ごとに呼ばれるというメソッドになっています。
基本的には0.02秒毎に呼ばれてるような仕組みになっています。
この秒数を変更したい場合、メニューの「Edit」→「Project Setting」→「Time」と選択すると次のようなTimeManagerというタブがでてきます。
この画像の「Fixed Timestep」を変更することでFixedUpdateが呼ばれる間隔を変更することができます。
試しにFixedTimestepを1.02に変更してから実行してみましょう。
1秒後に動いているのがわかりますよね?
先程のコードのFixedUpdateとしているところをUpdateに変更することで全く動きが異なっているのがわかるかと思います。
特徴
FixedUpdateの特徴は今回の動きでわかっていただけたかと思います。
Updateは毎フレーム呼ばれるのに対し、FixedUpdateは設定されている一定秒数ごとによばれるというものです。
FixedUpdateでは入力処理などを行うのはやめたほうが良いでしょう。
一定間隔で処理をするため、ユーザーの操作次第では入力にラグがでてしまって思わぬ誤動作を生む可能性があります。
そのため、処理ごとにUpdateとFixedUpdateのどちらに処理を記述するか考えて使う必要があります。
LastUpdateメソッドとは?
使い方
最後にLastUpdateというメソッドについて見ていきます。
今回はCube2と言う形でもうひとつCubeを用意します。
Updateメソッドを用いて今回は処理をしていますが、特におかしい点はなかったかと思います。
しかし内部的にはそれぞれのオブジェクトのUpdateメソッドが呼ばれる順番はバラバラです。
例えば
とあるフレームでは「赤CubeのUpdateメソッド」が呼ばれたあとに「青CubeのUpdateメソッド」が呼ばれたとします。
次回以降の別のフレームでは「青CubeのUpdateメソッド」が呼ばれたあとに「赤CubeのUpdateメソッド」が呼ばれることもあり順不同で順番がバラバラに呼ばれることがあります。
このオブジェクトは最後にUpdateメソッドを呼びたいという時にこのLastUpdateメソッドを呼び出します。
まとめ
いかがでしょうか?
今回はUpdateメソッドについて解説しました。
Updateメソッドには3種類あり、それぞれ動きが違うためオブジェクトの持つ役割によって使い分けをする必要があるでしょう。
使い方次第では不具合やユーザーの不利益になるような操作に至る可能性があるためよく考えて使い分けましょう!