国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Unity-時間和幀率管理

2021-01-06 11:43 作者:unity_某某師_高錦錦  | 我要投稿

借助?Update?函數(shù),可定期通過腳本監(jiān)控輸入和其他事件,并采取適當(dāng)?shù)牟僮?。例如,可在按下“forward”鍵時移動一個角色。在處理這種基于時間的動作時要記住的一項(xiàng)重要規(guī)則是,游戲的幀率不是恒定的,并且 Update 函數(shù)調(diào)用之間的時間長度也不是恒定的。

舉例來說,假設(shè)在一項(xiàng)任務(wù)中需要逐步向前移動某個對象,一次一幀。起初看起來好像可以在每幀將對象移動一個固定距離:

但是,如果幀時間不是恒定的,那么對象看起來會以不規(guī)則的速度移動。如果幀時間為 10 毫秒,那么對象將以?distancePerFrame?的距離每秒前進(jìn)一百次。但如果幀時間增加到 25 毫秒(比如由于 CPU 負(fù)載的原因),那么對象每秒只會前進(jìn)四十次,因此移動的總距離更短。解決方案是通過可從?Time.deltaTime?屬性讀取的幀時間來縮放移動距離大?。?/p>

請注意,此移動距離現(xiàn)在為?distancePerSecond?而不是?distancePerFrame。隨著幀率的變化,移動步長大小也會相應(yīng)改變,因此對象的速度將保持不變。

固定時間步長

與主幀更新不同,Unity 的物理系統(tǒng)_會_工作到固定的時間步長,這對于模擬的準(zhǔn)確性和一致性很重要。在物理更新開始時,Unity 通過將固定的時間步長值添加到上次物理更新結(jié)束的時間來設(shè)置“警報”時間。然后,物理系統(tǒng)將執(zhí)行計算,直到警報響起。

可從?Time?窗口中更改固定時間步長的大小,并可使用?Time.fixedDeltaTime?屬性從腳本中讀取該值。請注意,較低的時間步長值將產(chǎn)生更頻繁的物理更新和更精確的模擬,但代價是更大的 CPU 負(fù)載。除非要對物理引擎提出很高的要求,否則可能不需要更改默認(rèn)的固定時間步長。

Maximum Allowed Timestep

固定的時間步長使物理模擬能夠?qū)崟r保持準(zhǔn)確,但是在游戲大量使用物理系統(tǒng)并且游戲幀率也變低的情況下(例如,由于游戲中存在大量對象),可能會導(dǎo)致問題。必須在常規(guī)物理更新之間“擠壓”主幀更新處理;如果要進(jìn)行大量處理,則可在單個幀期間進(jìn)行多個物理更新。由于幀時間、對象位置和其他屬性在幀開始時被凍結(jié),因此圖形可能與更頻繁更新的物理系統(tǒng)不同步。

當(dāng)然,只有這么多的 CPU 處理能力,但 Unity 可以選擇讓您有效地減慢物理時間,讓幀處理能夠趕上來。Maximum Allowed Timestep?設(shè)置(位于?Time?窗口中)可限制 Unity 在指定的幀更新期間處理物理系統(tǒng)和 FixedUpdate 調(diào)用所花費(fèi)的時間。如果幀更新花費(fèi)的時間超過?Maximum Allowed Timestep?設(shè)置,則物理引擎將“讓時間停止”并讓幀處理趕上。一旦幀更新完成,物理引擎將恢復(fù),就好像讓時間停止后沒有流逝一樣。這種情況下的結(jié)果是剛體不會像正常情況下那樣實(shí)時完美移動,而會稍微減慢。然而,物理“時鐘”仍將跟蹤它們,就像它們正常移動一樣。物理時間的減慢通常是不明顯的,并且是針對游戲性能的合理折衷。

時間標(biāo)度

對于特殊效果,例如“子彈時間”,有時減慢游戲時間的流逝會很有用,能夠使動畫和腳本響應(yīng)以較低的速率發(fā)生。此外,有時可能希望完全凍結(jié)游戲時間,就像游戲暫停時一樣。Unity 有一個?Time Scale?屬性可以控制游戲時間相對于實(shí)時時間的進(jìn)展速度。如果該標(biāo)度設(shè)置為 1.0,則游戲時間與實(shí)時時間匹配。值為 2.0 會使 Unity 中的時間流逝速度加倍(即,動作將加速),而值為 0.5 則會將游戲速度減半。值為零將使時間完全“停止”。請注意,時間標(biāo)度實(shí)際上并不會降低執(zhí)行速度,而只是更改了通過?Time.deltaTime?和?Time.fixedDeltaTime?報告給 Update 和 FixedUpdate 函數(shù)的時間步長。當(dāng)游戲時間減慢時,調(diào)用 Update 函數(shù)的頻率可能高于平常,但每幀報告的?deltaTime?步長將會縮短。其他腳本函數(shù)不受時間標(biāo)度的影響,因此您可以在游戲暫停時顯示具有正常交互的 GUI。

Time?窗口有一個屬性可用于全局設(shè)置時間標(biāo)度,但使用?Time.timeScale?屬性從腳本設(shè)置該值通常更有用:

Capture Framerate

一個非常特殊的時間管理案例是您希望將游戲過程錄制為視頻。由于保存屏幕圖像的任務(wù)需要相當(dāng)長的時間,因此如果在正常游戲過程中嘗試執(zhí)行此操作,則游戲的常規(guī)幀率將大幅降低。這將導(dǎo)致視頻無法反映游戲的真實(shí)性能。

幸運(yùn)的是,Unity 提供了一個?Capture Framerate?屬性可用于解決該問題。該屬性的值設(shè)置為零以外的任何值時,游戲時間將減慢,而幀更新將以精確的定期時間間隔發(fā)出。幀之間的時間間隔等于 1 / Time.captureFramerate,因此如果該值設(shè)置為 5.0,則每五分之一秒更新一次。隨著對幀率的要求有效降低,在 Update 函數(shù)中便有了時間保存截屏或采取其他操作:

盡管使用這種技術(shù)錄制的視頻通??雌饋矸浅:茫钱?dāng)速度減慢時,游戲很難運(yùn)行。您可能需要嘗試使用 Time.captureFramerate 的值來確保充足的錄制時間,但不會過度復(fù)雜化測試播放器的任務(wù)。


Unity-時間和幀率管理的評論 (共 條)

分享到微博請遵守國家法律
铜川市| 克山县| 东阳市| 内丘县| 尤溪县| 平罗县| 驻马店市| 永胜县| 新营市| 土默特左旗| 清丰县| 康保县| 磐安县| 临安市| 兰考县| 克拉玛依市| 从江县| 肥乡县| 宜都市| 邹城市| 华宁县| 澄迈县| 手游| 黄大仙区| 乐山市| 肃南| 长沙市| 青海省| 观塘区| 三江| 罗城| 稻城县| 乌拉特中旗| 瑞昌市| 保山市| 武宣县| 尼玛县| 武城县| 左云县| 霍州市| 伊通|