Update()FixedUpdate() 그리고 최근에는 하나의 스크립트에서 두 기능을 모두 사용했습니다. 코드는 작동하지만 질문이 있습니다.

이 두 기능을 모두 사용하면 문제가 발생합니까? 둘 다 사용해도 안전합니까?

답변

주문 업데이트

게임 로직 및 상호 작용, 애니메이션, 카메라 위치 등을 추적 할 때 사용할 수있는 몇 가지 다른 이벤트가 있습니다. 일반적인 패턴은 Update 함수 내에서 대부분의 작업을 수행하는 것이지만 사용할 수있는 다른 함수도 있습니다.

FixedUpdate :

FixedUpdate는 종종 Update보다 더 자주 호출됩니다.

프레임 레이트가 낮 으면 프레임 당 여러 번 호출 할 수 있고 프레임 레이트가 높으면 프레임간에 전혀 호출되지 않을 수 있습니다. 모든 물리 계산 및 업데이트는 FixedUpdate 직후에 발생합니다. FixedUpdate 내에서 이동 계산을 적용 할 때 값에 Time.deltaTime을 곱할 필요가 없습니다.

FixedUpdate는 신뢰할 수있는 타이머에서 호출됩니다. 프레임 속도

.

업데이트 :

업데이트는 프레임 당 한 번 호출됩니다. 프레임 업데이트를위한 주요 기능입니다.

LateUpdate :

LateUpdate는 업데이트가 완료된 후 프레임 당 한 번씩 호출됩니다.

Update에서 수행되는 모든 계산은 LateUpdate가 시작될 때 완료됩니다. LateUpdate의 일반적인 용도는 다음과 같은 3 인칭 카메라입니다. 캐릭터를 움직이고 Update 내부로 돌리면 LateUpdate에서 모든 카메라 이동 및 회전 계산을 수행 할 수 있습니다. 이렇게하면 카메라가 위치를 추적하기 전에 캐릭터가 완전히 움직였습니다.

고정 업데이트를 사용하려면 업데이트와 후기 업데이트를 동시에 사용하는 것이 안전합니다.

p>

 using UnityEngine; using System.Collections; public class CheckFunctionExecutionOrder : MonoBehaviour { void FixedUpdate () { Debug.Log("FixedUpdate time :" + Time.deltaTime); } void Update () { Debug.Log("Update time :" + Time.deltaTime); } void LateUpdate() { Debug.Log("late Update time :" + Time.deltaTime); } } 

의견

  • 훌륭한 답변입니다! 실행하기 전에 FixedUpdate를 기다리는 코 루틴을 생성 할 수 있다는 점을 포함하는 것이 좋습니다. 시작 메서드 effectivley에서이 코 루틴을 시작하면 LateFixedUpdate가 제공됩니다 (유용하지는 않지만 용도가 있음).
  • Time.deltaTime을 곱하는 것은 FixedUpdate에서 여전히 좋은 생각입니다. 속도 등을 " 단위 대신 " 초당 단위 "로 표현할 수 있습니다. 틱당 " 고정 된 타임 스텝을 변경하면 ' 다시 돌아가서 모든 매개 변수를 다시 조정할 필요가 없습니다. 같은 속도. FixedUpdate의 장점은 Time.deltaTime이 Update에서와 같은 방식으로 프레임 속도 및 시간 스케일링을 기반으로 모든 프레임에서 변수 결과를 가져 오는 대신 FixedUpdate에서 액세스 할 때 항상 안정적인 fixedDeltaTime을 반환한다는 것입니다.

답변

실제로 모두 동시에 실행되며 스크립트는 해당 함수에서 작업을 수행합니다. Update 는 프레임 당 한 번 호출되고 FixedUpdate 는 “물리적 업데이트”( 조정할 수있는 고정 된 시간마다 한 번씩).

또한 LateUpdate 가 있습니다. 해당 참조 프레임의 업데이트 기능. 전체 메시지 목록은 MonoBehaviour 참조를 참조하세요.

여기에서 이를 다루는 Unity 자습서 .

댓글

  • 물리 업데이트를 제어 할 수 있습니까? 고정 TimeStep을 어떤 값으로 설정하면 그 시간 후에 고정 업데이트가 실행됩니까? 그리고 게임 물리학도 그 시간이 지나면 작동 할 것입니다.
  • @MuhammadFaizanKhan 그것이 작동하는 방식이어야합니다. 현재 Unity 버전에서는 ' 확실하지 않지만 답변을 작성했을 때 그랬습니다. 기본적으로 업데이트는 매 프레임마다 업데이트되며 물리는 다른 업데이트 기능과는 별도로 자체 프레임 속도 및 업데이트 기능을 갖습니다.

Answer

Update (), FixedUpdate () 및 LateUpdate ()를 모두 하나의 스크립트로 사용하는 것이 안전합니다. 적어도 나는 어떤 문제도 없었습니다.일반적으로 메인 루프에는 Update ()를 사용하고 물리학과 같은 경우에는 FixedUpdate ()를 사용하고 다른 모든 작업 후에 실행하려는 루프에는 LateUpdate ()를 사용합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다