2018.03.06
aiboに気を取られ、久しぶりの投稿となります。
今回は、Unityの最初に知っておく方がよい、基礎知識をご紹介します。
※Twitterと連動して、VR開発のノウハウをブログでまとめています。
『デルタタイム』をご存知でしょうか?
おそらく、少しでもUnityの開発をしたことがある人は、見たことがあると思います。
無意識に、使用している人も多いのではないでしょうか。
<Time.deltaTime>
Time.deltaTime とは(公式マニュアル)
こちらのマニュアルから、例題をお借りして解説します。
「あるオブジェクトを、一定の時間で10メートルずつ動かしたい」
こんな場合、どのようにコーディングしますか?
無知だった頃の私は、下記のようにコーディングしていました。
=========================================================
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void Update() {
float translation += 10;
transform.Translate(0, 0, translation);
}
}
=========================================================
つまり、『1フレーム毎に、10メートル移動していく』となります。
ここで考えてみてください。
1フレームは、何秒でしょうか?
実は、何秒という規定はなく、PCのスペック次第で変わってきます。
処理が遅いPCであれば、1秒間に30フレーム(=300メートル)
処理が早いPCであれば、1秒間に150フレーム(=1500メートル)
というように、進む距離が大幅に違ってしまいます。
スペックによって、オブジェクトが進む速さが違っては、問題ですよね。
なので、このような1フレーム毎に規定の距離移動させたい時などは、別の方法をとる必要があります。
それが、「デルタタイム」です。
=========================================================
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
void Update() {
float translation = Time.deltaTime * 10;
transform.Translate(0, 0, translation);
}
}
=========================================================
このように、Time.deltaTime に乗算することで、経過時間に対して一定の距離を進めることができるようになります。
Time.deltaTimeに何が入っているかというと、
前回のフレームを処理してから、今回のフレームが実行されるまでの間に、何秒経過したのかが記録されています。
なので、処理速度にムラがあるような環境でも、一定の速度でオブジェクトが移動しているように見えます。
環境によって速度が変わってしまって悩んでいる場合は、ぜひTime.deltaTimeを使ったコーディングに変更してみてください。