對于開發游戲的人來說,粵嵌科技的小編相信場景里面的每一幀都是要很精確的,只有這樣才可以給客戶帶來很好的體驗感,在游戲行業中體驗感是十分的重要的。今天粵嵌科技的小編就來和大家一起說在游戲開發中幀同步是如何實現的?要怎么樣去實習這些功能的呢?下面就聽unity培訓機構粵嵌科技給大家講講。
幀同步實現流程
設定游戲的邏輯幀率和關鍵幀率,在這我們假定游戲1s執行20個邏輯幀,每5幀是一個關鍵幀。
服務器1s向客戶端廣播所有的關鍵幀,在這,服務器每1s向客戶端廣播4次關鍵幀,每次廣播內容為上一個關鍵幀到這一個關鍵幀之間玩家的所有操作。
客戶端收到服務器廣播的關鍵幀后,開始執行所有的幀操作,例如A在第7幀要執行移動命令。如果這段時間沒有任何操作,意味著這段時間玩家沒有操作。游戲每一幀都要執行正常的游戲邏輯,該回血的回血,該攻擊的攻擊,跟關鍵幀是否攜帶操作信息沒有關系,只要收到關鍵幀,則一直執行到當前收到的關鍵幀為止。
客戶端的每次操作不會立即生效,而是上傳給服務器,客戶端執行操作的時間以收到服務器發送的為準,服務器保證的是所有客戶端都以同一幀執行該操作。
幀同步原理
相同的輸入 + 相同的時機 = 相同的顯示
客戶端接受的輸入是相同的,執行的邏輯幀也是一樣的,那么每次得到的結果肯定也是同步一致的。為了讓運行結果不與硬件運行速度快慢相關聯,則不能用現實歷經的時間(Time.deltaTime)作為差值閥值進行計算,而是使用固定的時間片段來作為閥值,這樣無論兩幀之間的真實時間間隔是多少,游戲邏輯執行的次數是恒定的,舉例:
我們預設每個邏輯幀的時間跨度是1秒鐘,那么當物理時間經過10秒后,邏輯便會運行10次,經過100秒便會運行100次,無論在運行速度快的機器上還是慢的機器上均是如此,不會因為兩幀之間的跨度間隔而有所改變。
而渲染幀(一般為30到60幀),則是根據邏輯幀(10到20幀)去插值,從而得到一個“平滑”的展示,渲染幀只是邏輯幀的無限逼近插值,不過人眼一般無法分辨這種滯后性,因此可以把這兩者理解為同步的.
如果硬件的運行速度趕不上邏輯幀的運行速度,則有可能出現邏輯執行多次后,渲染才執行一次的狀況,如果遇到這種情況畫面就會出現卡頓和丟幀的情況.
如果說你也想要學習關于unity這個方面的知識的話,那么粵嵌科技歡迎大家來我們公司的unity培訓班進行實地考察,也可以點擊我們文章下面的獲取試聽資格按鈕來獲取我們的unity課程免費試聽資格,在試聽中可以更加深入的了解我們粵嵌科技。