読者です 読者をやめる 読者になる 読者になる

【Unity】Time.deltaTimeを知らなくて右往左往した話

FPSによってゲーム内の移動やらなんやらの都合が悪かったんだけども、Time.deltaTimeを速度に掛け合わせてあげれば、その辺りを上手く調節してくれるらしい。

  pos.x += (speed * Time.deltaTime * dx) * 5;

こんな感じ。
最後の5は、速度の補正用。定数で管理するほうが良いね。
こんな単純なことも知らないと相当苦労する。
入門書の1ページ目に載せといて欲しいレベル……。

それから、Unityはゲーム内速度をTime.timeScaleの値で簡単に調整出来るみたい。

//ポーズ
if (GUI.Button (new Rect (0, 0, buttonSize, buttonSize), pauseTexture)) {
  Time.timeScale = 0;
}
//1/2速
if (GUI.Button (new Rect (buttonSize, 0, buttonSize, buttonSize), halfTexture)) {
  Time.timeScale = 0.5f;
}
//通常速度
if (GUI.Button (new Rect (buttonSize * 2, 0, buttonSize, buttonSize), normalTexture)) {
  Time.timeScale = 1;
}
//2倍速
if (GUI.Button (new Rect (buttonSize * 3, 0, buttonSize, buttonSize), doubleTexture)) {
  Time.timeScale = 2;
}
//4倍速
if (GUI.Button (new Rect (buttonSize * 4, 0, buttonSize, buttonSize), quadrupleTexture)) {
  Time.timeScale = 4;
}

ただ、この値に依るゲーム内速度調整が適用されるのは、Time.deltaTimeの掛かっている数値か、FixedUpdate()の中で実行されている処理に限られるみたい。

Unity3D:timeScaleで一時停止やスロー再生 - devlog [naru design]
ありがたいことに、こちらで実際に試行した結果が確認出来る。

テラシュールウェア [Unity]Timescale0で時間を停止中でもアニメーションを再生したい
メニュー画面とかでの動きとの関係を考えるならば、こちらが参考になるかも。

ともかく、倍速再生が出来るようになって、デバッグ速度が格段に上がったから良かった。
しかし、FixedUpdate()なんて存在を初めて知った……。
もっと勉強しないとなー。