ダーク/ライト切り替え

【Unity】DOTweenでTime.timeScaleを操作する際の落とし穴と個別制御の解決策

投稿日 2025-12-24T16:36:13.382460+09:00

【Unity】DOTweenでTime.timeScaleを操作する際の落とし穴と個別制御の解決策

目次

目次を読み込み中...

Unityでスローモーション演出やポーズ機能を実装する際、Time.timeScale を操作するのは一般的ですが、DOTweenでこれを行う場合には特有の注意点があります。

本記事では、**「timeScaleを0にするとアニメーションが止まる問題」の解決策と、「オブジェクトごとに時間の速さを変える方法」**について解説します。


1. DOTweenでTime.timeScaleを操作する際の注意点

問題:timeScaleを0にするとアニメーションが完結しない

DOTween.To() を使って Time.timeScale を 1.0 から 0.0 へ変化させるコードを書く場合、デフォルトの設定ではアニメーションが永遠に終わりません。

原因: DOTweenはデフォルトで Time.deltaTime を参照して動作します。timeScale を 0 に向かってアニメーションさせると、DOTween自身が進むための時間も 0 に近づいてしまうため、最終的に「時間が止まり、アニメーションも停止する」という状態に陥ります。

解決策:.SetUpdate(true) を使う。
この問題を回避するには、timeScale の影響を受けない Unscaled Time(現実の時間) を参照するように設定します。

この一行を追加することで、ゲーム内の時間が止まっていても、指定した秒数(上記例では1秒)で正確にアニメーションが完了します。

2. オブジェクトごとにTimeScaleを個別に変える方法

Unityの Time.timeScale はゲーム全体に影響を与えるグローバルな値です。「特定のキャラだけ速く動かす」といった個別制御は標準機能にはありませんが、以下の手法で代替可能です。

手法A:DOTweenの個別timeScale(Tween単位)

作成した Tween インスタンスに対して個別に速度倍率を設定できます。

手法B:AnimatorのSpeedプロパティ(アニメーション単位)

Animatorを使っている場合、再生速度をスクリプトから制御できます。

手法C:localTimeScaleを自作する(スクリプト制御)

Update() 内で移動などを計算している場合、独自の変数(localTimeScale)を掛けるのが最も確実です。

手法D:パーティクルの速度制御

まとめ

実装対象推奨される方法
ゲーム全体のポーズ・スローTime.timeScale + SetUpdate(true)
特定のTween演出tween.timeScale
キャラの動作速度Animator.speed
独自の移動ロジックTime.deltaTime * localTimeScale

Time.timeScale は非常に強力ですが、DOTweenと組み合わせる際は必ず「そのアニメーション自体が止まってしまわないか?」を意識し、必要に応じて .SetUpdate(true) を活用しましょう。


準備中

このサイトをシェアする

【Unity】DOTweenでTime.timeScaleを操作する際の落とし穴と個別制御の解決策