Godot游戲練習(xí)01-第26節(jié)-輪次結(jié)束后彈出升級(jí)選項(xiàng)

本節(jié)實(shí)現(xiàn)游戲輪次結(jié)束之后彈出可選的升級(jí)選項(xiàng), 供玩家選擇, 每個(gè)玩家出現(xiàn)的升級(jí)選項(xiàng)可以不一樣

這一節(jié)我卡了好久, 因?yàn)閷?shí)現(xiàn)過(guò)程中碰到很多麻煩的問(wèn)題

原教程的邏輯如下:

  1. 服務(wù)端判斷輪次結(jié)束, 不要直接開(kāi)始下一輪次, 而是進(jìn)入升級(jí)選項(xiàng)生成流程
  2. 服務(wù)端為遍歷所有peer, 為每個(gè)peer生成一個(gè)升級(jí)選項(xiàng)列表, 并緩存對(duì)應(yīng)peer的可用升級(jí)選項(xiàng)列表
  3. 服務(wù)端使用rpc_id, 將對(duì)應(yīng)peer的升級(jí)選項(xiàng)發(fā)送到peer, 由每個(gè)peer僅在自己的客戶(hù)端上生成對(duì)應(yīng)的升級(jí)選項(xiàng)Node

希望達(dá)成的效果是, 服務(wù)器決定每個(gè)peer的升級(jí)選項(xiàng), 每個(gè)peer展示自己的升級(jí)選項(xiàng)Node, 每個(gè)peer可以通過(guò)射擊來(lái)選中其中一個(gè)升級(jí)選項(xiàng)并通知到服務(wù)器, 不同peer之間互不影響, 一個(gè)peer打碎(選中)升級(jí)選項(xiàng)Node, 不影響另一個(gè)peer上的升級(jí)選項(xiàng)

但是有個(gè)尷尬的問(wèn)題, 目前的HitBox和HurtBox都是在服務(wù)端進(jìn)行實(shí)際的碰撞檢測(cè)與邏輯處理, 子彈/升級(jí)選項(xiàng)等Node的authority都是Host, 碰撞檢測(cè)與邏輯處理實(shí)際上只發(fā)生在Host端, Client的peer射擊子彈只會(huì)與Host上的升級(jí)選項(xiàng)發(fā)生碰撞, 而Client端生成的升級(jí)選項(xiàng)僅Client自身知道和可見(jiàn), 而且壓根不會(huì)進(jìn)行物理碰撞判斷

原教程中的處理方式如下:

  1. 在Host端生成所有peer端的升級(jí)選項(xiàng), 每個(gè)升級(jí)選項(xiàng)的HurtBox設(shè)置peer_id_filter, Host端隱藏其余peer的升級(jí)選項(xiàng)節(jié)點(diǎn)顯示
  2. Host端生成子彈時(shí), 在子彈的HitBox中設(shè)置source_peer_id為發(fā)射子彈的玩家對(duì)應(yīng)peer_id
  3. Host端檢測(cè)碰撞(HurtBox)中, 先判斷是否設(shè)置了peer_id_filter(大于0), 若設(shè)置了, 則碰撞時(shí)進(jìn)行過(guò)濾, 僅與對(duì)應(yīng)source_peer_id的HitBox碰撞
  4. 對(duì)應(yīng)的peer的客戶(hù)端上僅同步生成自己的peer_id對(duì)應(yīng)的升級(jí)選項(xiàng)節(jié)點(diǎn), 不執(zhí)行實(shí)際的碰撞檢測(cè)
  5. 經(jīng)過(guò)以上處理之后, 對(duì)應(yīng)peer的子彈僅會(huì)與Host上對(duì)應(yīng)peer的升級(jí)選項(xiàng)發(fā)生碰撞, 各peer上僅顯示自身能選擇的升級(jí)選項(xiàng), Host上有所有peer的升級(jí)選項(xiàng)但僅顯示自身peer能攻擊的選項(xiàng)(peer_id_filter為1)
  6. 當(dāng)某peer通過(guò)子彈攻擊升級(jí)選項(xiàng)節(jié)點(diǎn), 選擇自己的升級(jí)項(xiàng)之后, Host端刪除所有該peer的升級(jí)選項(xiàng)節(jié)點(diǎn)并通知對(duì)應(yīng)peer也刪除所有升級(jí)選項(xiàng)節(jié)點(diǎn)

我覺(jué)得這個(gè)處理流程太麻煩了, 直接在場(chǎng)景中生成節(jié)點(diǎn), 讓玩家通過(guò)"攻擊"的方式選擇升級(jí)選項(xiàng)有比較好的沉浸感, 但是按照這種處理方式服務(wù)端與客戶(hù)端顯示的內(nèi)容不同, 流程過(guò)于復(fù)雜, 不直接用UI處理, 也符合很多主流游戲的做法

前面的過(guò)程一樣, 通過(guò)Host生成所有peer端的升級(jí)選項(xiàng), 并緩存, 之后對(duì)每個(gè)peer執(zhí)行rpc調(diào)用, 在對(duì)應(yīng)peer客戶(hù)端顯示升級(jí)選項(xiàng)UI, 玩家選中升級(jí)選項(xiàng)之后, 通過(guò)rpc將index響應(yīng)到服務(wù)器


anim1.gif

目前只是按自己的想法實(shí)現(xiàn)了UI顯示/動(dòng)畫(huà), 以及選項(xiàng)回傳, 還沒(méi)有處理后續(xù)的邏輯

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容