ニュース

Top  >   27. 移動・テレポート・掴む  >   Q, Time.deltaTimeを掛けているのに移動速度がフレームレートに依存する

Q, Time.deltaTimeを掛けているのに移動速度がフレームレートに依存する

2026/03/19

メインコンテンツへスキップ
< すべてのカテゴリに戻る

A,結論

移動量・速度・力のどれを扱っているかを確認し、deltaTimeを適切な場所に1回だけ掛けます。

原因 / 背景

Rigidbodyの速度へdeltaTimeを掛けたり、入力と移動の両方で二重に掛けたりすると、意図した速度になりません。

実装 / 手順

  1. TransformやCharacterControllerの移動量には、速度×Time.deltaTimeを渡します。
  2. RigidbodyのMovePositionはFixedUpdateで速度×Time.fixedDeltaTimeを位置に加算します。
  3. Rigidbody.linearVelocity(Unity 6)へは毎秒の速度を渡し、deltaTimeを掛けません。AddForceもForceModeに応じた積分を物理エンジンが行うため、無条件にdeltaTimeを掛けません。
  4. 入力の読み取りタイミングと物理更新を分け、実際の秒間移動距離で比較します。

サンプルコード

using UnityEngine;

public class DeltaTimeMoveExample : MonoBehaviour
{
    [SerializeField] private float speed = 3f;

    private void Update()
    {
        transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.World);
    }
}

※ 実機確認が必要な項目は、Editor だけで判断せず、対象デバイスでも必ず動作確認してください。

難易度:Level 2(初心者)
対象プラットフォーム:PC,VR,Visual Studio,Unity
関連キーワード:C#,FixedUpdate,Rigidbody,移動,aca

Level 1-2 向けバナーLevel 3-5 向けバナー 1Level 3-5 向けバナー 2