Forestプログラミング【Unity】Unityで「時間」を扱うときに注意すべきこと【Unity】Unityで「時間」を扱うときに注意すべきこと2017年12月21日プログラミングG2U目次Unityで時間を扱うUnityのUpdateはフレームごとに実行されるTime.deltatime一秒ごとに10単位動き続けるコード10秒ごとに何かを実行するコードUnityで時間を扱うUnityでゲームなどを作るとき、「○秒置きに敵に攻撃させたい」「1秒にこれだけ動かしたい(速さをこれくらいにしたい)」といった実装が必要なことは少なくありません。通常こういった処理を行いたい場合、Animationを設定するか、スクリプトのUpdate内に実装するのですが、特にUpdate内に処理を書く場合に注意すべきことがあります。UnityのUpdateはフレームごとに実行されるこれはある程度Unityをやっている人には常識ですが、Updateは一定の間隔で呼び出されているわけではありません。フレームごとに呼び出されます。フレームとは一回の描画のことです。ゲームは通常「処理を行い、画面に描画する」ということの繰り返しで実行されます。この繰り返しの一単位がフレームとなるわけです。フレームごとの時間間隔は一定ではありません。処理が重かったりPCのスペックが低かったりすればフレームごとの時間間隔は長くなる可能性がありますし、反対に処理が軽かったり良いPCを使ったりすればフレームごとの時間間隔は短くなる可能性があります。増え方が変わってしまいます。Time.deltatimeUnityでは時間に関わる処理を行うための機能が用意されています。これはフレーム間の時間を取得してくれるものです。これを使えば環境や処理内容に依存せず、時間のみに依存する実装を行うことができます。次に使い方の例を上げておきます。一秒ごとに10単位動き続けるコード10秒ごとに何かを実行するコードこちらの記事にアクセスがそれなりにあったので補足です。厳密に「何秒ごとに何かをする」を行いたいならば、コルーチンやUniRxを用いる方が良いです。追記)※なお、[SerializeField]とあるのはprivateなフィールドをUnityのインスペクターからいじれるようにするためです。しておくと、このスクリプトを付与したGameObjectのインスペクターをいじることで、オブジェクトによって違う間隔、違う速さを設定できるようになります。publicフィールドでもよいのですが、オブジェクト指向的にはこちらの方が好ましいのでこのようにしました。プロパティをインスペクターで扱いたいと言ったオブジェクト指向的により良い実装を行う方法も紹介していますので興味があったらこちらもどうぞ。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。このサイトの使用を継続することで、その使用に同意したとみなされます。コントロール方法を含む詳細についてはこちらをご覧ください。免責・リンク掲載しているプログラムや情報による不具合について、一切責任は持てませんので、自己責任にてご利用ください。当サイトはリンクフリーです。自由にリンクしてもらって結構です。