2017-10-12 3 views
0

Unity와 WebGL 게임을 만들었습니다. 일부 계산은 모든 프레임에 필요하지 않으므로 콜 루틴에 넣습니다. 그러나 게임이 백그라운드에있을 때 코 루틴은 정상보다 느리게 작동하고 추가 5-10 초를 기다립니다.앱에 포커스가 없거나 다른 탭에 있지 않으면 WaitForSeconds가 작동을 멈 춥니 다.

예를 들어, 군인들이 저에게 달리고 총알을 발사하여 살해합니다. 그들이 범위에 들어가면 그들은 또한 발사하기 시작합니다. 나는 적이 코 루틴의 범위에 있는지 확인했다. 브라우저에서 다른 탭을 클릭하면 일부 적들이 정상보다 가깝게되고 일부는 게임 화면을 통과합니다. 이것은 게임을 unplayable합니다.

코 루틴을 제대로 작동시키는 방법이 있습니까? 또는 모든 계산 방법을 업데이트 할 필요가 있습니까?

예제 코드는 다음과 같습니다

private IEnumerator ActionDeciderCoroutine() 
{ 
    while (true) 
    { 
     DoAction(); 
     yield return new WaitForSeconds(Constants.ENEMY_THINKING_TIME); 
    } 
} 
+0

제 조언 : 이것에 코 루틴을 사용하지 마십시오. – Draco18s

+0

코 루틴에서 적의 범위를 어떻게 확인합니까? 그것을 보여줄 수있는 코드를 줄 수 있습니까? 'Update()'함수는 coroutine이'Update()'로 바뀌는 것과 거의 같지 않습니다. – armnotstrong

+0

플레이어 설정에서 "백그라운드에서 실행"을 선택 했습니까? – Cenkisabi

답변

1

코 루틴은 "이상하게"행동하지 않습니다. WaitForSeconds을 사용하는 것이이 질문의 제목을 변경 한 이유입니다. WaitForSeconds yield 명령어는 대기 시간 또는 타이머를 으로 지정하려는 경우 Unity에 포커스가 없거나 다른 탭에있을 때 카운트를으로 계산할 때 사용됩니다. 초점이 있거나 WebGL을 사용하는 경우 탭으로 돌아 왔을 때 다시 시작됩니다.

반대하면 앱이 다른 탭에 초점 또는 경우에도이없는 경우에도 일반적으로을 계속 에 대기 또는 타이머를 할 때 사용되는 WaitForSecondsRealtime입니다. 그것은 스케일링되지 않은 함수를 사용하여 함수를 사용합니다. 귀하의 경우, WaitForSecondsRealtime 수율 지침을 사용해야합니다.

private IEnumerator ActionDeciderCoroutine() 
{ 
    while (true) 
    { 
     DoAction(); 
     yield return new WaitForSecondsRealtime(Constants.ENEMY_THINKING_TIME); 
    } 
} 
+0

불행히도이 또한 내 문제를 해결하지 못합니다. 나는 timescale이 하나가 아닌 다른 특정 시간을 기다리는 데 사용되는 것 같아요. –

+0

당신은 아마 다른 일을하고있을 것입니다. [This] (https://pastebin.com/ei9G1UkW)는 제 테스트 코드입니다. 시도 해봐. 다른 탭으로 이동하여 돌아올 때 타이머가 계산됩니다. 이제 WaitForSeconds로 바꾸십시오. 다른 탭으로 돌아가서 돌아 오면 계산이 멈춰야합니다. – Programmer

+0

mozilla firefox 브라우저에서 코드를 테스트했습니다. 결과도 같습니다. 몇 초 후에 완전히 느려지거나 멈 춥니 다. 내가 10-20 초 몇 번 기다렸지 만 약 1-2 초가 지나갔 기 때문에. –

관련 문제