ウィンナスのプログラミング忘備録

アプリケーション制作をしている最中に発見したテクニックを忘備録としてまとめていきます。

【Unity2D】端末間の速度の違いを無くす!

今回は、AndroidiPhoneなど様々な解像度に対応した速度になるようにしてみます。

 

デルタタイムを使って速度を調整しよう!

速度の調整は実に簡単で、「Time.deltaTime」を掛けるだけなんです。

例えば、下のような処理があったとします。

Vector2 vec;
vec.x += 1;
    
transform.position = vec;

こいつを下のように書くだけでいろんな種類の解像度に対応できます。

Vector2 vec;
vec.x += 1 * Time.deltaTime;
    
transform.position = vec;

 

基本的に速度計算にはデルタタイムを掛けるようにするといいと思います!

 

そもそもなぜ速度が違うのか?

デルタタイムを使用しない場合はどういう意味なのかを説明していきます。

vec.x += 1;

この場合、「1フレームごとにx方向へ1進む」という意味です。

つまり、

1秒間に30フレーム(30FPT)⇒1秒間に30(1 * 30フレーム)進む

1秒間に60フレーム(60FPT)⇒1秒間に60(1 * 30フレーム)進む

わけです。

フレーム数は端末のスペックで変わります。

60FTPもあれば30FTPもあるので端末間で速度が違くなります。

 

デルタタイムを使うと何が違うのか?

デルタタイムを使用した場合はどういう意味なのかを説明していきます。

vec.x += 1 * Time.deltaTime;

この場合、「1秒ごとにx方向へ1進む」という意味です。

デルタタイムはFTPの値によって変化します。

30FTPであれば 1/30

60FTPであれば 1/60

になります。

これを踏まえて計算すると...

1秒間に30フレーム(30FPT)⇒1秒間に1(1 * 1 / 30 * 30フレーム)進む

1秒間に60フレーム(60FPT)⇒1秒間に1(1 * 1 / 60 * 60フレーム)進む

という計算になります。

 

上にも書きましたが、「基本的にはデルタタイムを掛ける」といいでしょう♪