【ハルシオンブログ】timeScaleの影響を受けないUnscaledDeltaTimeを使う
おはようございます。坂内っす。
Unityで処理の早送りをするのにこんなことをしたりしてます。
Time.timeScale = 2f;
2倍速の処理になりますよね。
色々なものが2倍の速度になってしまい困るって時。
timeScaleの影響を受けないようにするには「Time.UnscaledDeltaTime」を使います。
分かりやすいようにこんな画面作ってみました。

上の0がtimer1
下の0がtimer2
スライダーはtimeScaleをいじれるようになってます。
[Blog20220411.cs]
スタートボタンを押したらカウントが始まる感じです。

こんな感じで、timeScaleを変えてもunscaledDeltaTimeで計算している方は速度が変わらないのが分かります。
ということで、timeScaleをいじっても変わらないdeltaTimeのお話でした。
あでゅ~ノシ
Unityで処理の早送りをするのにこんなことをしたりしてます。
Time.timeScale = 2f;
2倍速の処理になりますよね。
色々なものが2倍の速度になってしまい困るって時。
timeScaleの影響を受けないようにするには「Time.UnscaledDeltaTime」を使います。
分かりやすいようにこんな画面作ってみました。

上の0がtimer1
下の0がtimer2
スライダーはtimeScaleをいじれるようになってます。
[Blog20220411.cs]
using UnityEngine;
using UnityEngine.UI;
public class Blog20220411 : MonoBehaviour
{
[SerializeField] Text lbl1;
[SerializeField] Text lbl2;
[SerializeField] Text lblScale;
[SerializeField] Slider sldTimeScale;
[SerializeField] Button btnStart;
float timer1 = 0f;
float timer2 = 0f;
bool isStart;
void Start()
{
lblScale.text = Time.timeScale.ToString();
sldTimeScale.onValueChanged.AddListener(OnChangeSlider);
btnStart.onClick.AddListener(OnClickButton);
}
void Update()
{
if (!isStart) {
return;
}
timer1 += Time.deltaTime;
timer2 += Time.unscaledDeltaTime;
lbl1.text = timer1.ToString();
lbl2.text = timer2.ToString();
}
void OnChangeSlider(float value) {
lblScale.text = value.ToString();
Time.timeScale = value;
}
void OnClickButton() {
isStart = true;
}
}
スタートボタンを押したらカウントが始まる感じです。

こんな感じで、timeScaleを変えてもunscaledDeltaTimeで計算している方は速度が変わらないのが分かります。
ということで、timeScaleをいじっても変わらないdeltaTimeのお話でした。
あでゅ~ノシ
Category: 開発日記(Unity)
« 【ハルシオンブログ】Unity2021.2からProjectでプレハブを消すときにDelete and Unpackが増えてた | 【ハルシオンブログ】prefabのrootに飛ぶショートカット »
コメント
| h o m e |