유니티 시간

김찬수·2023년 5월 11일
0

Unity

목록 보기
8/15

게임에서 한 화면을 프레임(Frame)이라고 함

초당 몇 프레임을 그리는지를 나타내는 값을 FPS(Frame Per Second)라고 함

FPS는 컴퓨터의 사양에 따라 같은 애플리케이션을 실행한다 할지라도 달라지기 때문에 FPS에 기반한 구현은 옳지 않음

private float DistancePerFrame = 1f;

    void Update()
    {
        // FPS에 따라 이동량이 달라진다.
        transform.Translate(0f, 0f, DistancePerFrame);
    }

위와 같이 구현한다면 FPS에 따라 이동량이 달라짐

FPS와 무관하게 콘텐츠를 구현하기 위해서는 프레임 사이에 흘러간 시간을 기록한 델타타임을 사용해야 함

  • 유니티에서는 Time.deltaTIme을 사용
private float Speed = 1f;

    void Update()
    {
        // 움직임이 더이상 FPS가 아닌 시간에 의존하게 된다.
        transform.Translate(0f, 0f, Speed * Time.deltaTime);
    }

유니티는 2가지의 델타타임을 가지고 있음

  • 가변 델타타임 (Time.deltaTime)과 고정 델타타임(Time.fixedDeltaTime)

고정 델타타임(Time.fixedDeltaTime)은 물리 연산을 위해 사용됨

물리의 경우 어떠한 하드웨어 환경이던지 동일한 결과를 보장해야 함

만약 가변 델타타임만을 이용한다면 고성능의 하드웨어에서는 더 촘촘히 물리가 연산되겠지만, 저성능의 하드웨어에서는 듬성듬성 물리가 계산되어 두 컴퓨터에서의 결과가 동일하지 않을 수 있음 (컴퓨터의 성능에 따라 차이가 발생함)

고정 델타타임을 사용하는 FixedUpdate()의 경우 Update()와는 다른 동작을 하게 되는데, 프레임 사이에 꽤 많은 시간이 흐른 경우 유니티는 이를 따라잡기 위해 다수의 FixedUpdate() 호출을 일으킬 수 있음


빨간색으로 표시된 것이 매 프레임 실행되는 로직들, 즉 Game Loop의 매 순회를 의미함


위와 같이 노란색으로 표시된 루프가 하나 더 존재하는데, 이는 물리와 관련된 Physics Loop라고 함

유니티 매뉴얼의 좌측 상단을 보면

이라고 적혀 있는 것을 확인할 수 있음

즉, Fixed Time Step(Fixed Update가 실행되는 주기)값이 deltaTime보다 작으면 그만큼 Physics Loop가 여러 번 반복하여 실행된다는 것을 알 수 있음

초보 개발자가 기억이 나지 않을 때 꺼내어 보기 위해 기록하는 공간입니다. 틀린 점이 있다면 댓글로 알려주시면 정말 감사하겠습니다.

profile
프로그래머 지망생

0개의 댓글