Unity에서 Update와 FixedUpdate의 차이점은 무엇입니까?


10

Update()그래픽과 FixedUpdate()물리 에 사용하라는 지시를 받았지만을 사용할 때 입력 내용이 등록되지 않는 경우가 있습니다 FixedUpdate(). Update()그래도 모든 것에 사용하면 잘 작동합니다 .

내가 귀찮게해야합니까 FixedUpdate(), 아니면 뭔가 잘못하고 있습니까?

답변:


10

FixedUpdateUpdate설정에 따라 보다 빠르거나 느리게 실행될 수 있습니다 . 로드 ( Update실행 속도) 및 설정 속도 FixedUpdate(편집-> 프로젝트 설정-> 시간에 있음)에 따라 다릅니다 . 이상적으로 Update는 프레임 당 한 번 실행 되므로 입력을 캡처 할 위치입니다. FixedUpdate물리 바디 제어와 같이 메소드의 입력에 대해 조치를 취해야하는 경우 플래그를 설정 Update한 후 처리하십시오 FixedUpdate.

bool leftMouseDown = false;

void Update()
{
    if(Input.GetMouseButtonDown(0))
        leftMouseDown = true;
}

void FixedUpdate()
{
    if(leftMouseDown )
    {
        //update physics bodies with input
        leftMouseDown = false;
    }
}

물리학을 FixedUpdate자주 업데이트해야 할 가능성이 낮고 고정 업데이트의 물리학이 변수 업데이트의 물리학보다 예측 ( 결정론 ) 이 훨씬 더 쉽기 때문에 방법 에서 물리학을 제어하는 ​​것이 좋습니다 .


부울 조건 (es.GetMouseButtonDown) 대신 축 (Input.GetAxis ( "Horizontal"))에서 값을 읽어야하는 경우는 어떻습니까? 업데이트가 FixedUpdate보다 여러 번 실행되면이 경우 조언이 무엇입니까? 결국 업데이트에 소비하기 전에 여러 업데이트 중에 발생한 축의 평균값을 계산해야합니까? (+1 btw)
Heisenbug

FixedUpdate가 얼마나 빠른지 어떻게 알 수 있습니까?
Tokamocha

1
@Tokamocha 고정 업데이트 속도는 편집-> 프로젝트 설정-> 시간에서 설정합니다.
MichaelHouse

@Heisenbug 개인적으로 나는 마지막 값을 사용하고 그것이 얼마나 잘 작동하는지 볼 것입니다. 예기치 않은 결과가 발생하면에 의해 처리 될 때까지 축 값의 평균을 계산할 수 있습니다 FixedUpdate. 그것은 "느낌"이 무엇인지 실제로 파악하기 위해 약간의 놀이 테스트가 필요한 것들 중 하나입니다.
MichaelHouse

1
최근 테스트에서 문서에 암시 된 것과는 달리 새로운 입력 플래그가 이미 FixedUpdate (적어도 PC)에서 사용 가능하다는 것을 알았습니다. 따라서 Update에서 플래그를 설정 한 다음 여기에 표시된대로 그 다음 다음 Update (예 : 다음 프레임)에서이를 적용하면 FixedUpdate의 입력을 직접 처리하는 것과 관련하여 실제로 게임에 대기 시간 프레임을 추가 할 수 있습니다. 이것은 여러 개의 FixedUpdate가있는 프레임에서 이중 처리 입력을 피하거나 FixedUpdate가없는 프레임에서 입력이 누락되지 않도록 주의해야합니다 .
DMGregory

7

각각의 기능을 이해해야합니다. Update()각 프레임마다 가능한 한 자주 호출됩니다 (확실하지 않을 수도 있습니다). FixedUpdate()일정 시간마다 호출되므로 "고정"됩니다.

입력은 그처럼 Update()간단합니다 ( FixedUpdate()입력 이벤트를 포착하지 못할 수도 있기 때문에 ). 그러나 게임 로직은 어느 쪽이든 들어갈 수 있습니다. 물리학은 결정 론적이어야하므로 그것이 있어야합니다 FixedUpdate(). 다른 것들은 필요 없습니다. 사용법에 따라 적절한 기능을 결정해야합니다.

대체로 일부 응용 프로그램은 모든 게임 로직 업데이트를 FixedUpdate()(외부에서도) 업데이트한다고합니다. Unity"고정 단계 게임 루프"라고합니다. 고정 단계 함수에 모든 업데이트 코드를 사용하면 결정 성이 있으며 앱이 매번 (및 각 장치에서) 동일한 방식으로 작동 할 가능성이 높아집니다. 또한 리플레이와 같은 멋진 기능도 사용할 수 있습니다.


따라서 FixedUpdate ()에 모든 것을 넣으면 게임이 여전히 모든 입력을 등록합니다.
Tokamocha

1
아니요, 모든 게임 로직 업데이트를 입력 할 수 있지만 입력 확인 은 할 수 없습니다.
NPS

2
이 답변은 정보가 잘못되었습니다. 우선 FixedUpdate의 1 / fixedDeltaTime 시간마다 호출되는 두 번째 되지 매 n : 일 fixedDeltaTime. 두 번째로, 게임 로직은 항상 이유를 쉽게하기 위해 FixedUpdate로 이동해야합니다. 업데이트는 렌더링 목적으로 만 사용됩니다 (Unity 커뮤니티의 아무도 거의 이것을 따르지 않는다는 것을 알고 있지만 실제로는 그렇게해야합니다). 셋째, FixedUpdate와 물리 엔진과의 관계는 결정론과 관련이 없습니다.
thr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.