프레임별 업데이트
Updates which happen once per frame and whose frequency therefore depends on frame rate.
읽는 시간 2분최근 업데이트: 한 달 전
Unity는 프레임당 한 번씩 일부 업데이트를 수행합니다. MonoBehaviour 스크립트는 메서드를 통해 이 업데이트 루프에 연결할 수 있습니다. 예를 들어 게임 캐릭터의 메서드에서 조이패드를 통해 사용자 입력을 읽고 캐릭터를 일정 정도 앞으로 움직일 수 있습니다. 이와 같은 시간 기반 동작을 처리할 때 게임의 프레임 속도가 달라지며, 따라서 호출 간의 시간도 달라질 수 있다는 점을 기억해야 합니다.
MonoBehaviour.UpdateUpdateUpdate게임의 가변 프레임 속도는 종종 FPS(초당 프레임)로 표시됩니다. 프레임 속도는 호스트 기기의 기능과 각 프레임을 그리는 데 필요한 그래픽스 및 계산의 복잡도와 같은 요인에 따라 달라집니다. 예를 들어 화면에 100개의 활성화된 캐릭터가 있는 경우 1개만 있는 경우보다 게임의 프레임 속도가 더 느려질 수 있습니다.
사용자의 품질 설정 또는 Adaptive Performance 패키지에 따라 달리 제한되지 않는 한, Unity는 게임을 가능한 한 빠른 프레임 속도로 실행하려고 합니다. 각 프레임에서 발생하는 작업에 대한 자세한 내용은 실행 순서 다이어그램의 Game Logic 섹션에서 확인할 수 있습니다.
한 번에 한 프레임씩 점진적으로 오브젝트를 앞으로 움직이는 작업을 생각해 보겠습니다. 처음에는 오브젝트를 각 프레임마다 고정된 거리만큼 이동할 수 있는 것처럼 보일 수 있습니다.
//C# script exampleusing UnityEngine;using System.Collections;public class ExampleScript : MonoBehaviour { public float distancePerFrame; void Update() { transform.Translate(0, 0, distancePerFrame); // this is incorrect }}
그러나 이 코드를 사용하면 프레임 속도가 달라지면서 오브젝트의 외관상 속도도 달라집니다. 게임이 100FPS로 실행 중인 경우 오브젝트는 초당 100번씩 을 움직입니다. 하지만 프레임 속도가 초당 60프레임으로 느려지면(예: CPU 부하로 인해) 초당 60번만 앞으로 나아가므로 같은 시간 동안 더 짧은 거리를 이동하게 됩니다.
distancePerFrame대부분의 경우, 이는 특히 게임과 애니메이션에서 바람직하지 않습니다. 게임 내 오브젝트가 프레임 속도와 관계없이 일정하고 예측 가능한 속도로 움직이도록 하는 것이 훨씬 더 일반적입니다. 솔루션은 각 프레임의 이동량을 각 프레임이 경과한 시간만큼 스케일하는 것으로, 이는 Time.deltaTime 프로퍼티에서 읽을 수 있습니다.
//C# script exampleusing UnityEngine;using System.Collections;public class ExampleScript : MonoBehaviour { public float distancePerSecond; void Update() { transform.Translate(0, 0, distancePerSecond * Time.deltaTime); }}
이동은 이제 이 아닌 로 표시됩니다. 프레임 속도가 달라지면 이동 단계의 크기가 그에 따라 달라지므로 오브젝트의 속도가 일정합니다.
distancePerFramedistancePerSecond타겟 플랫폼에 따라 Application.targetFrameRate 또는 QualitySettings.vSyncCount를 사용하여 애플리케이션의 프레임 속도를 설정합니다. 자세한 내용은 Application.targetFrameRate API 기술 자료를 참조하십시오.