Unity 的游戲循環機制

Unity 的游戲循環機制

在 Unity 中,游戲的運行是基于的。每一幀都遵循固定的執行順序:

  1. 處理輸入

  2. 執行游戲邏輯?(包括 Update、FixedUpdate 和協程)

  3. 渲染場景

  4. 顯示幀

為什么?GameTime.time?在同一幀內不變

  1. GameTime.time?是只讀屬性

    • 它返回的是當前幀開始時刻的時間戳

    • 在同一幀的所有代碼執行過程中,這個值保持不變

    • 只有在下一幀開始時,Unity 引擎才會更新這個值

  2. 代碼執行與時間推進的關系

    • 您的代碼是在一幀內的「執行游戲邏輯」階段運行的

    • 在這一階段,時間還沒有「推進」,GameTime.time?保持固定

    • 只有當這一幀完全結束,進入下一幀時,時間才會更新

舉例說明Bug

while (GameTime.time - begin <= 0.03f) // 條件永遠為 true
{var lerp = (GameTime.time - begin) / 0.03f; // 永遠是 0/0.03 = 0yMouse = Mathf.Lerp(_y_mouse, cameraConfig.y_mouse, lerp); // 永遠是起始值distanceFromTarget = Mathf.Lerp(...); // 同上// 沒有 yield return,循環繼續立即執行下一輪// GameTime.time 仍然是 10.0,因為還在同一幀
}
  1. 在第一輪計算:GameTime.time - begin = 0?≤ 0.03 → 繼續

  2. 在第二輪計算:GameTime.time - begin = 0?≤ 0.03 → 繼續

  3. 在第三輪計算:GameTime.time - begin = 0?≤ 0.03 → 繼續

  4. ...無限循環,因為?GameTime.time?不會改變

? ? ? ? 為什么這一幀始終無法進入下一幀?

? ? ? ? 1、首先我們要知道——Unity是幀更新機制,包括GameTime.time

? ? ? ? 2、又因為GameTime.Time需要下一幀進行更新,但GameTime.Time又作為循環條件,這一幀的內容始終在While循環中

使用協程方法yield return new WaitForEndOfFrame的原因

為什么?yield return?能解決這個問題

yield return new WaitForEndOfFrame()?的作用是:

  1. 暫停當前協程的執行

  2. 允許當前幀完成(完成渲染等所有操作)

  3. 在下一幀繼續執行協程

  4. 此時?GameTime.time?已經更新為下一幀開始的時間

所以,有了?yield return

  • 第1幀:執行一次循環,然后暫停

  • 第2幀:GameTime.time?已更新,再次執行循環

  • 第3幀:GameTime.time?再次更新,可能已經超過 0.03 秒,循環結束

之后的話題:如何理解一幀的內容

這一幀的內容為什么是while循環,還有其他代碼屬于這一幀的內容嗎,如何判斷哪些代碼屬于一個幀內的?

如何判斷哪些代碼屬于同一個幀?

有一個非常簡單的判斷原則:所有在同一個“游戲邏輯處理階段”被連續調用的代碼,都屬于同一幀。

更具體地說,在Unity的主循環中,一幀內按順序會發生很多事,下圖清晰地展示了這一流程以及您的代碼是如何被嵌入執行的:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921091.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921091.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921091.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法題(198):數字三角形

審題&#xff1a; 本題需要我們找到數字三角形中的最大路徑總值&#xff0c;并輸出 思路&#xff1a; 方法一&#xff1a;動態規劃 由于本題的路徑權值是路徑上每一個值累加起來&#xff0c;問題具有階段重復性&#xff0c;所以我們嘗試使用動態規劃解決此問題 &#xff08;1&a…

變頻器實習DAY42 VF與IF電機啟動方式

目錄變頻器實習DAY42一、工作內容1.1 OF229程序重新燒錄和測試二、學習內容2.1 VF與IF電機啟動方式1. VF&#xff08;Voltage Frequency&#xff09;啟動電機2. IF&#xff08;Current Frequency&#xff09;啟動電機總結附學習參考網址歡迎大家有問題評論交流 (* ^ ω ^)變頻器…

B樣條曲線,已知曲線上的某個點到起點的距離,確定這個點的參數u的值的方法

B樣條曲線&#xff1a;已知弧長 L 求參數 u 的方法1. B樣條曲線定義B樣條曲線由以下要素定義&#xff1a;控制點&#xff1a;P?, P?, P?, ..., P?節點向量&#xff08; Knot Vector &#xff09;&#xff1a;U [u?, u?, ..., u?]曲線次數&#xff1a;k&#xff08;例如…

云計算學習100天-第44天-部署郵件服務器

目錄 電子郵件通信——郵件服務器 基本功能 郵件通信的尋址 案例 網絡架構 配置server服務器 電子郵件通信——郵件服務器 基本功能 為用戶提供電子郵箱存儲空間 處理用戶發出的郵件——傳遞給收件服務器 處理用戶收到的郵件——投遞到郵箱 郵件通信的尋址 根據收件…

計算機視覺(七):膨脹操作

在計算機視覺中&#xff0c;膨脹是一種基本的形態學操作&#xff0c;主要用于處理和分析圖像的形狀。它通過“膨脹”或“放大”圖像中的前景對象來增加其尺寸或連接斷開的區域。 膨脹操作的工作原理類似于卷積&#xff0c;但使用的是結構元素 (structuring element)&#xff0c…

playwright+python UI自動化測試中實現圖片顏色和像素對比

def compare_image(expect_path, actual_path, output_path, color_diff_threshold10.0,max_diff_pixels100):# 讀取圖片img1 cv2.imread(expect_path)img2 cv2.imread(actual_path)if img1.shape ! img2.shape:img2 cv2.resize(img2, (img1.shape[1], img1.shape))# ------…

企業級AI應用,Dify集成RAGFlow知識庫保姆教程

第一部分&#xff1a;RAGFlow 端配置 在 Dify 能夠調用之前&#xff0c;確保 RAGFlow 已經就緒并提供了可訪問的 API。 步驟 1: 確保 RAGFlow 正常運行 具體可以參考&#xff1a;https://blog.csdn.net/qq_35354529/article/details/151149191?spm1001.2014.3001.5502 注意啟動…

daily notes[9]

文章目錄ubuntu notereferencesubuntu note Ubuntu can be written into a stick that boot ubuntu.the stick have the following effects. to install or upgrade Ubuntu include on macto experience the Ubuntu desktop without any actual operation in your OS.Disk Ut…

Java中 String、StringBuilder 和 StringBuffer 的區別?

在Java中&#xff0c;String、StringBuilder 和 StringBuffer 都用于處理字符串&#xff0c;但它們在可變性、線程安全性和性能上有顯著區別。以下是它們的對比&#xff1a;1. String不可變性&#xff08;Immutable&#xff09;String 對象一旦創建&#xff0c;內容不可修改。任…

SAM TTS網頁官網入口 – 在線版微軟tts在線語音合成助手

SAM TTS 是一個免費好用的在線版微軟語音合成助手&#xff0c;源自經典的 Windows XP 系統。它通過現代的 JavaScript 技術以在線工具的形式運行&#xff0c;讓用戶可以直接在線進行語音合成。SAM TTS 不僅保留了 Microsoft SAM 的標志性聲音&#xff0c;還新增了更多的自定義選…

2025 大數據時代值得考的證書排名前八?

在大數據時代&#xff0c;數據處理和分析能力愈發關鍵&#xff0c;考取相關證書能提升職場競爭力。接下來將為大家介紹 2025 年大數據領域值得考取的證書&#xff0c;從含金量、企業認可度、就業方向和薪資等方面分析&#xff0c;助你明晰職業發展路徑。CDA 數據分析師認證1、C…

淺談linux內存管理 的RMAP機制的作用和原理

Linux 內存管理中的 RMAP 機制深度解析反向映射&#xff08;Reverse Mapping, RMAP&#xff09;是 Linux 內存管理中的核心機制&#xff0c;它解決了大型系統中內存管理的效率和擴展性問題。本解析將從作用原理、演進歷史、數據結構和工作流程四個維度深入講解。一、RMAP 核心作…

Duolingo「多鄰國」v6.45.3 高級版

Duolingo「多鄰國」是一款著名的語言學習應用&#xff0c;可以借助它學習西班牙語&#xff0c;法語&#xff0c;德語&#xff0c;意大利語&#xff0c;俄語&#xff0c;羅馬尼亞語&#xff0c;葡萄牙語&#xff0c;土耳其語&#xff0c;荷蘭語&#xff0c;愛爾蘭語&#xff0c;…

【Unity Shader學習筆記】(五)Unity Shader初識

一、Shader是什么&#xff1f;Shader&#xff08;著色器&#xff09;是一段運行在GPU&#xff08;圖形處理器&#xff09;上的特殊程序&#xff0c;它用于控制渲染管線的特定階段&#xff0c;最終決定物體在屏幕上的最終顏色和效果。與傳統運行在CPU上的程序不同&#xff0c;Sh…

計算機視覺與深度學習 | 雙目立體特征提取與匹配算法綜述——理論基礎、OpenCV實踐與MATLAB實現指南

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 文章目錄 引言 ?? 核心研究問題 理論框架 1. 相機幾何模型 2. 特征提…

每青春千度硒仙人掌精粹液:從日常滴飲開始,調出好氣色好體質

每天的狀態&#xff0c;其實是由許多細節組成的。身體不舒服、情緒波動、氣色黯淡&#xff0c;很可能都是體內節奏被打亂的信號。開始在日常中加入幾滴每青春千度硒精粹液&#xff0c;是一種小小的嘗試&#xff0c;慢慢發現&#xff0c;狀態真的在悄悄發生改變。簡單滴飲&#…

< 自用文 主機 USC 記錄:> 發現正在被攻擊 后的自救

環境&#xff1a; 一臺 VPS&#xff0c;之前文章推薦過 $1/月 OS: Ubuntu 內存&#xff1a;961MB CPU: 1CORE 上面都是學習 Python 時寫的應用&#xff0c;這些應用在 CSDN 都有原碼&#xff0c;只是時間久了&#xff0c;自用的有修復bugs&#xff0c;還有些功能升級。 以前是…

硬件開發1-51單片機2-按鍵、中斷

一、GPIO&#xff08;General Purpose Input/Output&#xff09;GPIO 是 51 單片機和外界交互最基本的方式。工作模式&#xff1a;輸出模式&#xff1a;單片機給定引腳一個電平&#xff08;高電平 (5V)、低電平 (0V)&#xff09;&#xff0c;通過控制引腳實現高低電平輸出。輸入…

什么是Token?——理解自然語言處理中的基本單位

在日常生活中&#xff0c;我們使用手機語音助手、自動翻譯軟件和聊天機器人等智能工具&#xff0c;而這些技術背后都離不開對語言的精細處理。今天&#xff0c;我們就來聊聊“token”這一看似專業的術語&#xff0c;了解它在自然語言處理&#xff08;NLP&#xff09;中的重要作…

線程通信機制

目錄 一、主線程與子線程基礎通信 1.1 主線程向子線程傳遞數據 二、子線程向主線程返回數據 2.1 通過共享變量方式 2.2 同步塊中使用wait/notify機制 2.3 Lock和Condition實現線程通信機制 一、主線程與子線程基礎通信 1.1 主線程向子線程傳遞數據 通過構造函數傳遞參數…