微妙に良く使うSmoothDamp使用時に、通常の「position += direction * speed * Time.deltaTime」での移動と同じ速度で動かす方法。
仕様が謎なので理屈は不明だが、「speed * 2.386f」&特定の設定にすると、ほぼ等速に!
サンプル動画
- A: SmoothDamp&Time.fixedDeltaTime
- B: 通常移動&Time.fixedDeltaTime
- C: SmoothDamp&Time.deltaTime
- D: 通常移動&Time.deltaTime
(Cパターンは、PC性能によって速度が大きく変わるので推奨しない)
コード
- Fixedなループ内で実行 (FixedUpdate or コルーチンのWaitForFixedUpdate)
- SmoothTimeは絶対に「0.01f」に固定。
(コレを変更するとスピードもおかしくなる) - speedは、「通常移動時の速度 * 2.386f」に設定。
//仮の目標位置。
Vector3 targetPosition = new Vector3(15.0f, 0, 0);
//任意のスピード。
float speed = 5.0f;
//掛けると何故か上手くいく魔法の倍率。
static readonly float SmoothDampModifier = 2.386f;
static readonly float SmoothTime = 0.01f;
Vector3 velocity;
void FixedUpdate()
{
//【比較用の通常移動】
transformA.position = transformA.position + Vector3.right * (speed * Time.fixedDeltaTime);
//【SmoothDampでの移動】
transformB.position = Vector3.SmoothDamp(transformB.position, targetPosition, ref velocity, SmoothTime, speed * SmoothDampModifier, Time.fixedDeltaTime);
}