【Unity】SmoothDampの速度を通常移動と同じ速さにする方法

【Unity】SmoothDampと通常移動のスピードテスト

微妙に良く使う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);
	}

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