본문 바로가기
Unity 게임 개발

Unity Time.realtimeSinceStartup 설명 및 공부

by daisy0461 2021. 3. 28.

docs.unity3d.com/ScriptReference/Time-realtimeSinceStartup.html

Unity - Scripting API: Time.realtimeSinceStartup

In almost all cases you can and should use Time.timeAsDouble instead. realtimeSinceStartup returns the time since startup, not affected by Time.timeScale. realtimeSinceStartup also keeps increasing while the player is paused (in the background). Using real

docs.unity3d.com

2020.3버전 Time.realtimeSinceStartup API입니다.

Time.realtimeSinceStartup은 게임이 시작된 이후의 실시간 시간(초)입니다.
이 값은 어플리케이션이 시작되고 난 후 의 값을 리턴합니다. 이 값은 timeScale에 영향을 받지 않습니다.
그리고 이 값은 사용자가 pause를 하더라도 백그라운드에서 계속 증가를 합니다. 이러한 장점이 있어서 실시간 서버를 사용할 수 없는 환경에서 시간을 시뮬레이션하는 용도로도 이용 가능합니다.

Time.realtimeSinceStartup은 시스템 타이머에 의해 보고되는 시간을 return합니다.
그리고 하드웨어와 플랫폼에 의존적이며 시간을 이용해서 어떤 값을 나누는 경우에 사용을 주의해야합니다.

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Example() {
        print(Time.realtimeSinceStartup);
    }
}

위의 예제를 통해 알아보자면 어플리케이션을 처음 작동하고 이후에 껐다가 다시 실행한 시간이 정확히 1시간 지났다고 가정을 해보겠습니다. 그럴때 Example()을 실행시킨다면 print에 의해 3600이 print될 것입니다.
다른 예제 또한 살펴보겠습니다.

using UnityEngine;
using System.Collections;

// An FPS counter.
// It calculates frames/second over each updateInterval,
// so the display does not keep changing wildly.
public class ExampleClass : MonoBehaviour {
    public float updateInterval = 0.5F;
    private double lastInterval;
    private int frames = 0;
    private float fps;
    void Start() {
        lastInterval = Time.realtimeSinceStartup;
        frames = 0;
    }

    void Update() {
        ++frames;
        float timeNow = Time.realtimeSinceStartup;
        if (timeNow > lastInterval + updateInterval) {
            fps = (float) (frames / (timeNow - lastInterval));
            frames = 0;
            lastInterval = timeNow;
        }
    }
}

Start함수에 의해 lastInterval에 처음 실행시킨 후 지금까지 지난 시간이 값에 들어가게 됩니다.
frame의 값은 0으로 초기화 됩니다.
Update가 매 프레임마다 호출이 된다는 점은 알고 계실 것입니다. 프레임이 몇번 불려졌는지 확인을 하기 위해 ++frame을 해줍니다.
그리고 timeNow에 처음 실행시킨 후 지금까지 지난 시간의 값이 들어가게 초기화를 해줍니다.
if문에 의해 어플리케이션을 실행시키고 1프레임이 지났을 때 0.5초가 지나있으면
if안에 있는 함수들을 실행을 합니다. if문의 존재 이유는 fps를 구하는 이유입니다.


(SetAcative를 통해서 Start시켜도 될것 같음 함 해봐야겠음 한번 실행을 해봐야겠음!!)