「yieldはfalseを返します」は、Unity3d C#スクリプトで特別な意味を持ちますか?


17

Unityには、通常の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ボンネットの下に同じすべてであるため、0偽ヌル)
jhocking

@jhocking「0のnullが内部ですべて同じであるため」なぜそれが重要なのですか?C#は非常に厳密に型指定された言語であるため、ほとんどの場合、「内部」で何かがどのように見えるかは重要ではありません。たとえば、あなただけ行うことができないif (0)か、if (null)CやC ++とは異なり、。
svick 14

肩をすくめても構いません。私が知っているのはそれがyield return 0機能することだけです。どうやら理由理由のMLMを説明
jhocking

2
これは通常のC#に追加されるものではありません。このyieldキーワードは、少なくともC#2.0以降で使用されています。Unityはそれをコルーチンと呼び、生成されたイテレーターとそこから返される値を処理して、コードの実行で非ブロッキング遅延を引き起こすことができます。
またはマッパー14

1
@Almo:それは単にWaitForSeconds宣言されていないからです。WaitForSecondsfloat引数を取り、実装している列挙の要素タイプを返すメソッドを宣言するとすぐに、再度コンパイルされます。したがって、yieldUnityにとって特別なものではありません。どちらかといえば、このWaitForSecondsメソッドはUnity にとって特別ですが、それでも言語 C#を拡張するものではなく、単に標準C#を使用して記述された追加のメソッドです。
ORマッパー14

回答:


19

スケジューラーが理解できる唯一の可能な収量値は次のとおりです。

  • 派生クラスYieldInstructionWaitForSecondsWaitForEndOfFrameWaitForFixedUpdateAssetBundleCreateRequestAssetBundleRequestとコルーチン
  • WWWオブジェクト
  • 上記以外の「その他の値」

場合、「他の値」が生じている(「NULL」の文字列値を含むようINT、などの任意の他の基本型BOOLスケジューラ意志上述のいずれでもない、...または任意のオブジェクトへの参照)次のフレームのコルーチンを「スケジュール」します。

- Bunny83の答え:ユニティ回答に著名なメンバー

WaitForEndOfFrameなどのほか、ちょうど空白の機能タグあるYieldInstructionエンジンに何をすべきかを決定するために。

デフォルトのケースはのようWaitForEndOfFrameです。そのyield returnため、boolなどの特別な意味を持たないものは、と同じWaitForEndOfFrameです。

この動作に関する公式ドキュメントはないようです。


更新

rutterは別の特別なケースについてコメントしました:yield return null

を含むすべてのUnityコルーチンyield return nullは、フレームをレンダリングする前に実行されWaitForEndOfFrameます。Unity Answersでrutterすばらしい答えを見つけることができます(これについてはさらに説明します)。


6
降伏nullWaitForEndOfFrameは同じであると仮定するのが一般的ですが、実行順序のマニュアルページで詳しく説明されているように、実際にはわずかに異なります。
ラッター14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.