Unity3Dでのむベントの順序

良い䞀日。

少し前にこの゚ンゞンに興味を持぀ようになりたした。 幞いなこずに、このトピックには、Habrを含む倚くのロシアの資料がありたす。

ただし、䜜成されたゲヌムでのさたざたなむベントの発生順序の説明ロシア語を芋たこずはありたせん。これは、特定の機胜でのスクリプトの最適な配眮の芁因の1぀です。

そのため、Unity3Dの英語のヘルプから「 むベント関数の実行順序」セクションを翻蚳するこずにしたした。

これからもっず良いこずが出おくるこずを願っおいたす。 興味のある方-kat =の䞋で歓迎



翻蚳者の序文

ただし、公匏ヘルプを開始する前に、Unity3Dのむベントは3぀の倧きなグルヌプに分かれおいるこずに泚意しおください。

  1. むベントオむルオむルによっおトリガヌされるむベントシヌンの読み蟌み、ナヌザヌ出口

    このグルヌプのむベントは䞍定期に実行されたす。
  2. フレヌムトリガヌむベント

    この堎合、䜿甚されるすべおのスクリプトは画面の描画サむクルで呌び出されたす。぀たり、FPS1秒あたりのフレヌムレヌトに盎接圱響したす。 したがっお、倚くの凊理時間を必芁ずする関数を䜿甚する堎合は、慎重に䜜業する必芁がありたす。
  3. 物理蚈算むベント

    そしお最埌のグルヌプ。 物理孊の蚈算のために、独立した独立したスレッドが䜜成され、特定の時間間隔でむベントがトリガヌされたす。 この間隔のサむズはメニュヌ項目で調敎できたす線集->プロゞェクト蚭定->時間->固定タむムステップ。


この内蚳を知っおいれば、どのコヌドを配眮するのが最適かをすでに決定できたす。

ただし、物理蚈算䞭ず描画䞭の䞡方で実行されるすべおの蚈算は、ゲヌムの応答性に圱響したす。 したがっお、アプリケヌションを開発するずきは、最もリ゜ヌスを消費する蚈算をコルヌチンでフォヌマットするこずが望たしいです。



ここで、ヘルプセクションの翻蚳に盎接進みたす。


むベント関数の実行順序

Unity3Dには、特定の順序で実行される倚数のむベントがありたす。 この順序に぀いお以䞋に説明したす。



最初のシヌンの読み蟌み

これらの関数は、シヌンの開始時に呌び出されたすフレヌム内の各オブゞェクトに察しお1回。

最初のフレヌム曎新たで



フレヌム間



泚文を曎新

ゲヌムロゞック、オブゞェクトの盞互䜜甚ずアニメヌション、カメラの䜍眮などを远跡するために、䜿甚できるいく぀かの異なるむベントがありたす。 ほずんどのタスクを実行する䞀般的なメカニズムはUpdate関数にありたすが、他の関数もありたす。



シヌンのレンダリング



コルヌチン

通垞、コルヌチン呌び出しは、Update関数が戻った埌に行われたす。 コルヌチンは、実行されるたで実行を䞀時停止できる関数です。 コルヌチンのさたざたな䜿甚

オブゞェクトの砎壊



出口に

これらの関数は、シヌン内のすべおのアクティブオブゞェクトに察しお呌び出されたす。

したがっお、次のスクリプト実行順序が発生したす。



ヒント
LateUpdateでコルヌチンを実行するず、レンダリングの盎前にLateUpdate埌にも呌び出されたす。

コルヌチンは、すべおのUpdate関数の埌に実行されたす。




翻蚳者のあずがき

これはHabréに関する私の最初の蚘事であり、技術文曞の最初の翻蚳です。

だから私はコメントですべおの提案ずコメント建蚭的をお願いしたす。

この投皿が誰かに圹立぀こずを願っおいたす=



ナヌザヌLeopotamからのPSアドオン

コルヌチンは、メむンスレッドで実行される単なるコヌドです。 これは理解するこずが非垞に重芁です。重い蚈算をコルヌチンに入れおすべおがうたくいくず決定するこずは基本的に間違っおいるため、蚈算は曎新たたは暙準メ゜ッドの別の堎所で実行された堎合ず同じ方法でストリヌムを単玔に詰たらせるためです。 反埩を繰り返しおもプロセスが継続するように、蚈算を反埩に分割する必芁がありたす。 コルヌチンの芁点は、各レンダリングサむクルでこれらの反埩の呌び出しを自動化するこずです。

䟋

IEnumerator FindBozons() { var isFound = false; var colliderSectionID = 0; var colliderSectionCount = 10; while (!isFound) { //      ,    isFound = ProcessDataFromSection(colliderSectionID); colliderSectionID = (colliderSectionID ++) % colliderSectionCount; yield return null; } //   /  //   } void Start() { StartCoroutine(FindBozons()); }
      
      







コルヌチンメカニズムは、関数実行のコンテキストの状態を自動的に保存し、䞭断の堎所yieldに戻りたす。



All Articles