コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Time.timescale に依存しない WaitForSeconds

WaitForSeconds は Time.timescale に依存するため
Time.timescale に 0 が代入されていると
WaitForSeconds が完了することはありません

もしも Time.timescale に依存しないようにしたい場合は
Unity 5.3 から追加された
「CustomYieldInstruction」を使用することで実現可能です

using System.Collections;
using UnityEngine;

public sealed class WaitForSecondsRealtime : CustomYieldInstruction 
{
    private float waitTime;

    public override bool keepWaiting
    {
        get { return Time.realtimeSinceStartup < waitTime; }
    }

    public WaitForSecondsRealtime( float time )
    {
        waitTime = Time.realtimeSinceStartup + time;
    }
}
IEnumerator Start()
{
    yield return new WaitForSecondsRealtime( 2 );
}

参考サイト様