【Unity/C#】Time.deltaTime(フレームレート依存の解消)の基本と仕組み

コードの型

物体の移動や数値の加算など、「時間経過」を伴う処理で使います。

C#

void Update()
{
    // 毎秒 5メートル移動させる
    // 速度(5)× 1秒あたりの経過時間(Time.deltaTime)
    transform.Translate(5 * Time.deltaTime, 0, 0);
}

コードの仕組み

なぜこれが必要かというと、「PCの性能によってゲームの進む速さが変わってしまうのを防ぐため」です。

  • 毎フレームの罠: Update() は、PCの性能が良いと1秒間に100回呼ばれ、古いPCだと30回しか呼ばれません。
  • そのまま足すと…: もし x = x + 0.1 という処理をすると、高性能PCでは一瞬でキャラが画面外へ飛んでいき、古いPCではのろのろ動くことになります。
  • Time.deltaTimeの正体: 「前回のフレームから今回のフレームまでにかかった時間(秒)」です。これを使うと、フレームレートが何回であろうと、「1秒間に移動する距離」を一定に保つことができます。

活用例(タイマーと移動)

連打ゲームでも使っていた「時間の減算」や、キャラクターの移動に必須です。

C#

// 1. タイマーのカウントダウン(1秒ずつ減る)
timeRemaining -= Time.deltaTime;

// 2. キャラクターの移動(毎秒 10単位進む)
float speed = 10.0f;
transform.position += Vector3.right * speed * Time.deltaTime;

その他(重要ポイント)

  • 「魔法の掛け算」: 距離や数値を変化させる時に * Time.deltaTime を掛けるだけで、「PCのスペックに依存しない滑らかな動き」が手に入ります。
  • Update() 以外では使わない: Start() で使う必要はありません。Update() のように「継続的に変化するもの」に対して使います。
  • 単位は「秒」: Time.deltaTime は常に「秒」単位です。例えば「0.5秒かけて移動させたい」という時も、この値をうまく使うことで物理的に正確な計算が可能になります。

初心者向けイメージ

Time.deltaTime は、「どんなスペックのPCでも、みんな同じ速さでゲームを楽しめるようにする交通整理係」です。

  • 性能が良いPCには「少しずつ動いて(deltaTimeを小さく)」と指示し、
  • 性能が悪いPCには「大きく動いて(deltaTimeを大きく)」と指示する。

この係員がいるおかげで、あなたは「1秒間に何メートル進ませるか?」という「速さ」だけを考えればよくなります。

コメント

タイトルとURLをコピーしました