2016年4月10日日曜日

Unity3DのTime.time

float endTime = Time.time + duration;
while(Time.time<endTime);
というコードをよく見るので調べてみた.
もちろん私はこのようなコードは書かない.
public class Scene0 : MonoBehaviour
{
    float prevTime_;
    float startTime_;

    string log_ = string.Empty;
    
    void Start()
    {
        prevTime_ = startTime_ = Time.time;
    }

    void Update()
    {
        if(Time.time<=prevTime_){
            float duration = prevTime_-startTime_;
            string str = string.Format("duration: {0} ({1} -> {2}) -{3}",
                duration, startTime_, prevTime_, System.DateTime.Now.ToShortTimeString());
            Debug.Log(str);
            log_ += string.Format("{0}\n", str);

            System.IO.File.WriteAllText(Application.dataPath+"/../log.txt", log_);
            startTime_ = Time.time;
        }
        prevTime_ = Time.time;
    }
}
Run In BackgroundをOnにしてビルドして, 放置するといいだろう.
だいたい9000 - 9600 seconds でリセットされるようです.
スリープ状態からの復帰など, 何かのタイミングでもリセットされるようです.
floatは, 4時間程度で 1 msecの精度を超えるので, リセットの周期はこの程度だと思います.
私は10000 seconds程度は起こりうる値だと思っています.

0 件のコメント:

コメントを投稿