Unity3d C # 스크립트에서`yield return;은 특별한 의미가 있습니까?


17

유니티에는 일반적인 C #에 추가되는 코 루틴을위한 특별한 것들이 있습니다.

예를 들어, 우리는 사용할 수 있습니다

yield return WaitForSeconds(5.f);

계속하기 전에 코 루틴이 5 초 동안 대기하도록합니다.

무엇을 yield return false;하고 yield return true;합니까?


yield return true뭔가 특별한 지 잘 모르겠습니다 . 하지만 yield return null난 그 의심 때문에 간단하게, 프레임 일시 중지 yield return false(도 동일한 효과가 yield return 0후드 같은 모든 때문에 거짓 널 (null))
jhocking

@jhocking“0부터 널 (null) 널 (null)이 모두 동일하기 때문에”이후 왜 그런가? C #은 매우 강력한 형식의 언어이므로 대부분의 경우 "후면에서"보이는 방식은 중요하지 않습니다. 예를 들어 C 및 C ++와 달리 if (0)또는을 수행 할 수 없습니다 if (null).
svick

어깨 then하면 상관 없습니다. 내가 아는 것은 yield return 0작동합니다. MLM이 설명한 이유
때문인 것 같습니다

2
이것은 일반적인 C #에 추가 되지 않습니다 . yield키워드는 적어도 C # 2.0 이후 주변왔다. 모든 Unity는 코 루틴 이라고 부르고 생성 된 반복자와 코드 실행시 비 차단 지연을 유발할 수있는 방식으로 반환 된 값을 처리합니다.
또는 매퍼

1
@Almo : WaitForSeconds선언되지 않았기 때문 입니다. WaitForSecondsfloat 인수를 사용하고 구현중인 열거의 요소 유형을 리턴하는 호출 된 메소드를 선언하자마자 다시 컴파일됩니다. 따라서 yieldUnity에는 특별한 것이 아닙니다. WaitForSeconds어쨌든 이 방법은 Unity에 특별하지만 언어 C #을 확장하지는 않지만 표준 C #을 사용하여 작성된 추가 방법입니다.
또는 매퍼

답변:


19

스케줄러가 이해하는 유일한 수율 값은 다음과 같습니다.

  • 유래의 클래스 YieldInstruction( WaitForSeconds, WaitForEndOfFrame, WaitForFixedUpdate, AssetBundleCreateRequest, AssetBundleRequest및 코 루틴
  • WWW객체
  • 위의 중 하나가 아닌 "다른 값"

"다른 값" 이 나오면 (int, bool , ... 또는 위에서 언급 한 것이 아닌 임의의 객체에 대한 참조 와 같은 다른 기본 유형의 문자열 값 "null"포함 ) 스케줄러는 다음 프레임의 코 루틴을 "스케줄"합니다 .

- Bunny83 답변 : 유니티 답변에 띄는 멤버

WaitForEndOfFrame등의 다른 사람, 그냥 빈 함수이다 그 태그 YieldInstruction엔진에 무엇을 결정하기 위해있다.

기본 사례는 WaitForEndOfFrame입니다. 따라서 yield returnbool과 같이 특별한 의미가없는 것이 있으면와 동일합니다 WaitForEndOfFrame.

이 동작에 대한 공식적인 문서는없는 것 같습니다.


최신 정보

rutter 는 또 다른 특별한 경우에 대해 언급했습니다.yield return null

를 포함한 모든 Unity Coroutines는를 yield return null제외하고 프레임이 렌더링되기 전에 실행됩니다 WaitForEndOfFrame. 당신은 찾을 수 러터답변 유니티에 걸쳐 멋진 대답 이 더 (좋은 다이어그램 포함) 설명.


6
수율 nullWaitForEndOfFrame동일 하다고 가정하는 것이 일반적 이지만 실행 순서 매뉴얼 페이지에 자세히 설명 된 것처럼 실제로 약간 다릅니다 .
러터
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.