无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

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

Unity-時(shí)間和幀率管理

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

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

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

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

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

固定時(shí)間步長(zhǎng)

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

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

Maximum Allowed Timestep

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

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

時(shí)間標(biāo)度

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

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

Capture Framerate

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

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

盡管使用這種技術(shù)錄制的視頻通常看起來(lái)非常好,但是當(dāng)速度減慢時(shí),游戲很難運(yùn)行。您可能需要嘗試使用 Time.captureFramerate 的值來(lái)確保充足的錄制時(shí)間,但不會(huì)過(guò)度復(fù)雜化測(cè)試播放器的任務(wù)。


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

分享到微博請(qǐng)遵守國(guó)家法律
通化市| 上栗县| 伊川县| 龙井市| 山东省| 漠河县| 临海市| 石狮市| 江山市| 公安县| 洛阳市| 九江县| 德清县| 辽阳市| 山阴县| 张家川| 高青县| 江山市| 安多县| 城固县| 曲水县| 安化县| 彭泽县| 南部县| 夏津县| 辽宁省| 当雄县| 平陆县| 石阡县| 靖安县| 定兴县| 瓮安县| 将乐县| 台东市| 古蔺县| 乾安县| 红原县| 忻州市| 宜城市| 元江| 阳城县|