1. 程式人生 > >Unity 3d 幀同步

Unity 3d 幀同步

最近給兩個新人解釋幀同步,寫了一個簡單的幀同步模型,但是公司不給上網,程式碼上傳不了,於是回家重寫了一個,但是有些工具類不想寫了,在網上找了一些可以用的程式碼湊合著用了。

幀同步的原理就是在一個回合內(一個固定的時間頻率,比如100ms)客戶端發服務端傳送關鍵幀,服務端收到所有客戶端廣播關鍵幀,所有的客戶端收到服務端廣播的關鍵幀後再執行。由於所有的客戶端程式碼都是一樣的,執行的幀數也是一樣的,所以每個客戶端得到的結果都是一樣的。

幀同步現的過程有個很重要的地方就是邏輯層和表現層一定要分開,表現層先行,邏輯層等發到服務端的指令再處理。

幀同步合做人數比較少(5到8人比較合適,多了資料包的傳送量非常大,會比較卡,特別是在手機上),同步要求比較高的遊戲,比如FPS遊戲和格鬥類遊戲。

幀同步雖然同步效果好,程式碼也簡單,但是還是有很多蛋疼的地方

(1)斷線重連,幀同步的斷線重連相當的蛋疼,還要服務端配合。

(2)一個客戶端卡了,所有的客戶端都會卡,所以有可能一個客戶端掉線了,其他人都會卡住

(3)物理引擎,一旦物體處於物理引擎的控制下就不能再強制去設定它的位置,如果強制設定它位置就會出現一些不可預知的結果,所以物理引擎是一個大坑,同步的最好不要用物理引擎,自己模擬就好了

(4)UDP傳送的包是不包證順序的,而且還可能丟包,

下面會附上一個幀同步的模型

服務端:https://github.com/caolaoyao/AsycServer

客戶端:https://github.com/caolaoyao/AsycClient

這個模型還有幾個問題

1、服務端沒有處理超時,一個客戶端掉了,所有的客戶端都會卡住了,服務端應該設定一個超時回撥,一旦超過某個設定的時間沒有收到客戶端的包,就當它什麼也沒有做,把關鍵廣播出去

2、服務端和客戶端都沒有處理收包的順序

3、同步物體的位置資訊的時候應該同步物體的狀態和方向,不應該直接同步位置,不然看起來移動的時候會很不自然,雖然提高同步頻率可以緩解這個問題,但這不是一種好的做法

相關推薦

Unity 3d 同步

最近給兩個新人解釋幀同步,寫了一個簡單的幀同步模型,但是公司不給上網,程式碼上傳不了,於是回家重寫了一個,但是有些工具類不想寫了,在網上找了一些可以用的程式碼湊合著用了。 幀同步的原理就是在一個回合內(一個固定的時間頻率,比如100ms)客戶端發服務端傳送關鍵幀,服務端收到

Unity 3D實現同步技術

筆者介紹:姜雪偉,IT公司技術合夥人,IT高階講師,CSDN社群專家,特邀編輯,暢銷書作者,國家專利發明人;已出版書籍:《手把手教你架構3D遊戲引擎》電子工業出版社和《Unity3D實戰核心技術詳解》電

覆盤王者榮耀手遊開發全過程,Unity引擎使用同步放棄狀態同步

https://blog.csdn.net/anypkv/article/details/78480877 http://king.shandian.biz/88.html   如今已經大獲市場成功的《王者榮耀》一直是業內各方關注的物件,而我們也知道這款產品在成為國民級遊戲之前

unity同步遊戲極簡框架及例項(附客戶端伺服器原始碼)

閱前提示:  此框架為有幀同步需求的遊戲做一個簡單的示例,實現了一個精簡的框架,本文著重講解幀同步遊戲開發過程中需要注意的各種要點,伴隨框架自帶了一個小的塔防sample作為演示. 目錄:

Unity 3D】學習筆記三十:遊戲元素——遊戲地形

nbsp 3d遊戲 strong 直觀 分辨率 == 摩擦力 fill 世界 遊戲地形 在遊戲的世界中,必然會有非常多豐富多彩的遊戲元素融合當中。它們種類繁多。作用也不大同樣。一般對於遊戲元素可分為兩種:經經常使用。不經經常使用。經常使用的元素是遊戲中比較重要的元素。一

Unity 3D】學習筆記四十二:粒子特效

空間 獲得 material package 一個 log 創建 spa mpi 粒子特效 粒子特效的原理是將若幹粒子無規則的組合在一起。來模擬火焰,爆炸。水滴,霧氣等效果。要使用粒子特效首先要創建,在hierarchy視圖中點擊create——particle s

什麽是遊戲中的同步

提高 服務 顯示 多個 網絡數 操作 導致 其他 方式 遊戲中的幀同步是一種客戶端與服務器的同步方式,是為了實現高實時性的需求而設計的。在實時pvp遊戲中,要求每個客戶端高度同步,怎麽做到精確的同步呢,那就是向同步的所有客戶端廣播同步消息。由於網絡存在延遲,因此一個客戶端發

再議Unity 3D

body 接納 ng- ebo unity3d遊戲 復雜 位數 市場 現實 一年前,偶發沖動,翻譯了《[譯] Unity3D遊戲和facebook綁定(1:簡單介紹)》系列文章。 如今看有2個明顯的優點, 一:給這個不溫不火的博客帶了top 3的人氣; 二:我個

Unity 3D Time 類

時間 one nbsp ren returns article atime .html ots Time class in UnityEngine Description The interface to get time information from Unity

Unity 3D之進階篇Transform的叠代器

number iss spa ict 遍歷 com blog rotation 是我 說在前面 我們通常使用Transform作為3D物體的一個位置屬性來看待,從這個類中獲取或者控制,物體的大小、位置、縮放值,或者通過transform來找到物體的子節點。but!!Tran

Unity 3D 實用的10個小技巧

知新樹 寧金峰Unity引擎,上手簡單易懂,但是很少有人對Unity編輯器的功能做一個全面細致的了解,一些非常實用的小功能在日常使用中很難被發現,但它們對工作效率的提升是有不小的幫助的。1)鎖定Inspector – 在inspector面板上方有一個小“鎖”圖標,點擊鎖住後可以將inspector面板鎖定在

unity 3d 入門 一 熟悉相關組件

碰撞體 條件 bubuko com 相關 ins img rigidbody gid 界面大概 inspector欄 兩物體碰撞的條件:必須有一個具有剛體-rigidbody,兩個都有碰撞體積box collider Audio source unity 3d

同步(LockStep)該如何反外掛

經驗 安全中心 決定 ash 最終 位移 例如 鼠標 沒有 在中國的遊戲環境下,反掛已經成為了遊戲開發的重中之重,甚至能決定一款遊戲的生死,吃雞就是一個典型的案例。目前參與了了一款動作射擊的MOBA類遊戲的開發,同步方案上選擇了幀同步技術(LockStep而非snaps

2.GUI控件的使用 --《UNITY 3D 遊戲開發》筆記

div info art color text tar scrip 寬高 執行 1.Label 控件 編寫腳本文件,直接綁定在main camera上 public class labelScript : MonoBehaviour { //設定一個值來接收外部

動作手遊實時PVP同步方案(圖解客戶端)

1、概述 1.1、基於UDP的幀同步方案   在技術選型方面,之所以選擇幀同步方案,在Kevin的一篇介紹PVP幀同步後臺實現的文章中已經做了詳細敘述,這裡簡單摘要如下:   高一致性。如果每一幀的輸入都同步了,在同樣的上下文中,計算得出的結果應該也是同步的。   低流量消耗。除了幀

[SimplePlayer] 3. 視訊同步

Frame Rate 幀率代表的是每一秒所播放的視訊影象數目。通常,視訊都會有固定的幀率,具體點地說是每一幀的時間間隔都是一樣的,這種情況簡稱為CFR(Constant Frame Rate);另外一種情況就是每一幀的時間間隔不一定相同,即可變幀率,簡稱為VFR(Variable Frame Rate),現

火星時代老師總結使用Unity 3D優化遊戲執行效能的經驗

      流暢的遊戲玩法來自流暢的幀率,而我們即將推出的動作平臺遊戲《Shadow Blade》已經將在標準iPhone和iPad裝置上實現每秒60幀視為一個重要目標。   以下是我們在緊湊的優化過程中提升遊戲執行效能,並實現目標幀率時需要考慮的事項。   當基本遊戲功能到

unity 3D】關於unity中製作繩子(Rope)的總結

    這幾天因為專案需要,一直在搜尋和學習unity中關於繩子製作的資源。於是開始在CSDN、BaiDu、Bilibili上面找各種相關的資源,但是隻是講解了最基本的關於繩子的通用製作方法,即:繩子由若干個Gameobject(可以是Cube、Capusual、Cylinder

總結moba遊戲與皇室戰爭類遊戲同步區別

  之前公司做一款類皇室戰爭遊戲,實時性操作要求不是那麼強,最近在找工作,自己做了一個demo,模仿王者榮耀的moba遊戲,實時性操作非常強,兩個遊戲都是幀同步,因為實時操作的問題,導致兩個專案架構有很大不同。例如:伺服器給客戶端同步間隔時長,客戶端邏輯層驅動,操作執行時間各不相同等。今天

小白學習Unity 3D做經典遊戲坦克大戰日常

簡單 esp 還需 分享圖片 經典遊戲 平滑濾波 一起 耗時 date() 老師 | Trigger 學習者 |小白 出品 | Siki 學院 Hello,小夥伴們。接下來小白跟Trigger老師做一款2D遊戲坦克大戰。從素材、代碼到場景和UI的遊戲開發。小白把日常遇到的