手把手教你實現物理碰撞的網路同步

2022-08-29 16:48:23 字數 1898 閱讀 3234

現如今,網路同步的技術在各種遊戲裡被廣泛應用和發展,那麼,如何在unity中搭建網路模組?如何使伺服器和客戶端之間通訊?如何做到網路同步?本文作者爛筆頭-27將從自身經驗出發,為大家一一解答這些疑問。

系列回顧:手把手教你實現unity網路同步

八、物理碰撞的網路同步

新建乙個預設ball,樣子是這樣:

為了讓球(ball)更像真實的球,給它新增帶彈性的物理材質:

3.為汽車(car)和球(ball)新增控制邏輯,以及需要同步的網路狀態。

汽車的控制**:

球(ball)不接收按鍵輸入,只有需要同步的物理狀態,物理狀態跟汽車(car)是相同的。

就這樣,汽車(car)和球(ball)都建立好了,可以進行基本的碰撞同步檢測了,效果如圖:

可以看到,在汽車(car)衝撞到球(ball)之後,球發生了劇烈的抖動,接下來,就要解決這個問題了。

4.在客戶端為伺服器物體進行物理狀態**

在目前的同步框架下,伺服器的物體在客戶端是基於狀態進行插值變化的。所以是滯後了,為了能在客戶端**它,我們可以建立乙個假的球(dummyball),然後把真正的球(serverball)隱藏(ps:僅僅是隱藏,同步邏輯還是一樣的),這樣,就可以做到

>汽車(clientcar)不和serverball發生物理碰撞,只和dummyball發生碰撞。

>可以在客戶端對dummyball進行物理**,而不是影響serverball。

這可能有點繞,簡而言之,就是為了在客戶端**伺服器的物體,客戶端建立了乙個假的」欺騙」玩家,但不是真的欺騙,dummyball在**之前的物理狀態必須是伺服器下發的最新狀態,dummyball的**如下:

然後客戶端為自己(clientcar)做**的同時,也為dummyball做**,**:

在汽車(car)的執行操作指令的邏輯中,因為physics.simulate()是全域性的,所以客戶端**執行一次,dummyball也**模擬了一次。

看看效果吧(藍色車是客戶端控制,紫色球是假球dummyball,都是客戶端做**的):

可以看到,在客戶端的**下,汽車(car)碰撞到球(ball)時,產生了很及時的碰撞反饋,此方案可行。

再把真實的球(serverball)給顯示出來對比一下(藍色車是客戶端控制,紫色球是假球dummyball,都是客戶端做**的,紅色球是serverball,是由伺服器下發的狀態包來做插值):

5.小結

實現sigmoid 手把手教你自己動手實現神經網路

階躍函式是指一旦輸入超過閾值,就切換輸出的函式。上述感知機中使用的就是該種啟用函式,一旦a大於0則,輸出變為1.上述感知機的階躍函式圖形如下,從圖中可以看出該階躍函式以0為界,輸出從0切換為1 或從1切換為0 值呈階梯式變化,因此稱為階躍函式。sigmoid函式與階躍函式對比 sigmoid函式 右...

C 手把手教你實現可變長的陣列

假設我們要實現乙個會自動擴充套件的陣列,要實現什麼函式呢?先從下面的main函式給出的實現,看看有什麼函式是需要我們實現的。int main 輸出結果 0 1 2 3 4 0 1 2 100 4 要實現的方式,要做哪些事情呢?我先列一下 要實現乙個可變長陣列類的,基本需要實現下面的7個函式 clas...

六條思路手把手教你網路創業

現在隨著internet的發展。網路經濟經過 泡沫時代 漸漸的奔向它明媚的春天。看著網路上乙個又乙個崛起的it巨人,你心動了?你著急了?你下決心了?網路創業的確是很誘人的名詞。因為 一 成本低 對網路創業者來說,如果不是開展很大的專案。起初所需要的資金並不是很多。也許一台電腦 adsl 虛擬主機 一...