FC2ブログ
    05 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 07

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】timeScaleの影響を受けないUnscaledDeltaTimeを使う 

    おはようございます。坂内っす。

    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)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/878-ccbbca30
    この記事にトラックバックする(FC2ブログユーザー)