10 초 동안 기능을 실행하고 2 초 동안 비활성화


10

업데이트 기능에서 호출하는 특정 기능이 있습니다. 처음 10 초 동안이 함수는 Update 함수에서 호출 된 후 다음 2 초 동안 비활성화 된 후 다음 10 초 동안 다시 활성화해야합니다. 이주기가 계속 반복되어야합니까? 어떻게 실행할 수 있습니까?

답변:


15

또는 모듈러스를 사용하는 하나의 라이너가 있습니다.

void Update()
{
    //if you want it loop from specific start time rather than from start of the game, 
    //subtract said time value from Time.time argument value
    if(Mathf.Repeat(Time.time, execDuration + sleepDuration) < execDuration)
        executeFunction();
}

1
Repeat()%(모듈러스) 의 차이가 있습니까? 문서는 "이것은 모듈러스 연산자와 유사하지만 부동 소수점 숫자와 함께 작동합니다"라고 나와 있지만 모듈러스는 수레와 함께 작동합니다 ...
BlueRaja-Danny Pflughoeft

1
@ BlueRaja-DannyPflughoeft 예와 아니오-다양한 언어에서 알 수 있듯이 %연산자는 종종 이상하게 행동합니다. 부동 소수점 숫자와 함께 작동하지 않거나 수학 연산에서 계수 연산에 대한 예기치 않은 또는 명백한 잘못된 결과를 제공합니다 (하드웨어 특성 반영) 정수 연산). C # / mono에서 연산자의 Repeat()정확한 구현을 찾을 필요가 없도록보다 안전한 옵션으로 선택되었습니다 %.
wondra 2016 년

3
나는 모든 언어가 IEEE 754 표준을 구현했다고 생각했지만 , 표준의 "모듈로"정의는 직관적이지 않기 때문에이를 구현하는 언어는 거의 없습니다.
BlueRaja-대니 Pflughoeft

코드를 통해 다른 코드 블록으로 주석을 구현하고 그에 따라 제목을 지정하는 것이 좋습니다.
S. Tarık Çetin

6

다음 코드를 테스트하지는 않았지만 아이디어를 얻습니다.

public float wakeUpDuration = 10.0f ;
public float sleepDuration = 2.0f;
private bool callFunction = true ;
private float time = 0 ;

void Update()
{
    time += Time.deltaTime;
    if( callFunction )
    {
         if( time >= wakeUpDuration )
         {
             callFunction = false;
             time = 0 ;
         }
         else
         {
             foo(); // Your function
         }
    }
    if( !callFunction && time >= sleepDuration )
    {
        callFunction = true;
        time = 0 ;
    }
}

deltaTime상대적으로 짧은 경우에만 작동합니다 . 델타가 더 길면 sleepDuration실패합니다.
James Curran

sleepDuration> Time.deltaTime이면 그러한 시스템이 필요하지 않습니다.
Hellium

아니요. deltaTime이 2.75 초라고 가정하십시오. 연속적으로 8 개의 활성 통화가 있어야하는 50 초 표시가 될 때까지 3 회 또는 4 개의 "활성"통화와 1 회의 "슬립"통화가 있어야합니다. 또한이 시나리오에서는 첫 번째 절전 모드 호출이 11 초에 이루어집니다. 시간을 0으로 재설정합니다. 1로 설정해야합니다.
James Curran

2
유니티에서 Time.deltaTime은 게임 엔진의 현재 프레임과 마지막 프레임 사이의 경과 시간을 나타냅니다 (따라서 최종 사용자에게는 Time.deltaTime이 2.75 초가되지 않기를 바랍니다. ...). 에서 상황, 당신이 할 수있다 "미스"기능 또는 여기에 문제가 이럴없는 기능에 울어는 "비"를 호출.
Hellium

4

코 루틴으로도 할 수 있습니다. 같은 것

public class Comp : MonoBehaviour
{
  private bool _shouldCall;

  Start() 
  {
    StartCoroutine(UpdateShouldCall)
  }

  Update() 
  {
    if(_shouldCall)
        CallTheFunction();
  }

  IEnumerator UpdateShouldCall()
  {
    while(true) 
    {
        _shouldCall = true;
        yield return new WaitForSeconds(10);
        _shouldCall = false;
        yield return new WaitForSeconds(2);
    }
  }

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.