Version: Unity 6.0 (6000.0)
언어 : 한국어
시간 및 프레임 속도 관리
고정 업데이트

프레임별 업데이트

Unity는 프레임당 한 번씩 일부 업데이트를 수행합니다. MonoBehaviour 스크립트는 MonoBehaviour.Update 메서드를 통해 이 업데이트 루프에 연결할 수 있습니다. 예를 들어 게임 캐릭터의 Update 메서드에서 조이패드를 통해 사용자 입력을 읽고 캐릭터를 일정 정도 앞으로 움직일 수 있습니다. 이와 같은 시간 기반 동작을 처리할 때 게임의 프레임 속도가 달라지며, 따라서 Update 호출 간의 시간도 달라질 수 있다는 점을 기억해야 합니다.

게임의 가변 프레임 속도는 종종 FPS(초당 프레임)로 표시됩니다. 프레임 속도는 호스트 기기의 기능과 각 프레임을 그리는 데 필요한 그래픽스 및 계산의 복잡도와 같은 요인에 따라 달라집니다. 예를 들어 화면에 100개의 활성화된 캐릭터가 있는 경우 1개만 있는 경우보다 게임의 프레임 속도가 더 느려질 수 있습니다.

사용자의 품질 설정 또는 Adaptive Performance 패키지에 따라 달리 제한되지 않는 한, Unity는 게임을 가능한 한 빠른 프레임 속도로 실행하려고 합니다. 각 프레임에서 발생하는 작업에 대한 자세한 내용은 실행 순서 다이어그램Game Logic 섹션에서 확인할 수 있습니다.

한 번에 한 프레임씩 점진적으로 오브젝트를 앞으로 움직이는 작업을 생각해 보겠습니다. 처음에는 오브젝트를 각 프레임마다 고정된 거리만큼 이동할 수 있는 것처럼 보일 수 있습니다.

//C# script example
using UnityEngine;
using System.Collections;

public class ExampleScript : MonoBehaviour {
    public float distancePerFrame;
    
    void Update() {
        transform.Translate(0, 0, distancePerFrame); // this is incorrect
    }
}

그러나 이 코드를 사용하면 프레임 속도가 달라지면서 오브젝트의 외관상 속도도 달라집니다. 게임이 100FPS로 실행 중인 경우 오브젝트는 초당 100번씩 distancePerFrame을 움직입니다. 하지만 프레임 속도가 초당 60프레임으로 느려지면(예: CPU 부하로 인해) 초당 60번만 앞으로 나아가므로 같은 시간 동안 더 짧은 거리를 이동하게 됩니다.

대부분의 경우, 이는 특히 게임과 애니메이션에서 바람직하지 않습니다. 게임 내 오브젝트가 프레임 속도와 관계없이 일정하고 예측 가능한 속도로 움직이도록 하는 것이 훨씬 더 일반적입니다. 솔루션은 각 프레임의 이동량을 각 프레임이 경과한 시간만큼 스케일하는 것으로, 이는 Time.deltaTime 프로퍼티에서 읽을 수 있습니다.

//C# script example
using UnityEngine;
using System.Collections;

public class ExampleScript : MonoBehaviour {
    public float distancePerSecond;
    
    void Update() {
        transform.Translate(0, 0, distancePerSecond * Time.deltaTime);
    }
}

이동은 이제 distancePerFrame이 아닌 distancePerSecond로 표시됩니다. 프레임 속도가 달라지면 이동 단계의 크기가 그에 따라 달라지므로 오브젝트의 속도가 일정합니다.

타겟 플랫폼에 따라 Application.targetFrameRate 또는 QualitySettings.vSyncCount를 사용하여 애플리케이션의 프레임 속도를 설정합니다. 자세한 내용은 Application.targetFrameRate API 기술 자료를 참조하십시오.

추가 리소스

시간 및 프레임 속도 관리
고정 업데이트
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961