学部1年の星野です。まだC#がよくわからず勉強中のUnity初心者です。そんな自分ですが少し前からUnityで音ゲーをつくっています。まだ完成はしていませんが、ほとんどの仕組みは完成したところです。作っている最中、ノーツ(音ゲーの時、リズムに合わせて流れてくるもの)を動かす仕組みを調べていた時、曲の再生時間を使ってノーツの座標を計算する方法がずれを少なくするためには良いとありました。ノーツの動きなんて「Time.deltaTime」で座標に一定の値を足してりゃできるだろうと考えていたので、大きな衝撃を受けました。そこで、どのくらいズレが生じるのか試してみたいと思いUnity上で検証してみました。(Unity初心者かつパソコン初心者の考えた検証方法なので間違っているかもしれません。)
検証
左の水色の長方形が判定ラインだとします。(座標は0,0,0))
右にある2つの白い正方形をノーツだとします。(上の正方形の座標(15、2、-2)下の正方形の座標(15、-2、-2))
上のノーツはTime.deltaTimeで、下のノーツは曲の再生時間で座標を計算して動かします。
判定ラインに到着したとき(ノーツのx座標が0になったとき)その時の曲の再生時間を表示します。
今回は曲の再生から1.5秒経った時、判定ラインにくるようにしました。つまり、出力される時間が1.5に近ければ近いほど正確ということになります。
結果
Time.deltaTimeによるノーツ 1.642653秒(ずれ0.142653秒)
曲の再生時間で動かしたノーツ 1.514649秒(ずれ0.014649秒)
Time.deltaTimeによるノーツは時間のばらつきが大きいのですが、曲の再生時間で動かしたノーツは時間のずれはなく、毎回この時間でした。
以上の結果よりTime.deltaTimeでノーツを動かすことは音ゲーにとって致命的な大きなずれを生みうることが分かりました。 これからもUnityやC#の勉強を頑張っていきたいと思います。