UE5 GAS框架解析內部數據處理機制——服務器與客戶端

當, gas通過點擊鼠標光標觸發事件時,內部的處理機制。

當通過點擊事件,命中中目標時, 可獲取到對應的TargetData 目標數據。處理相應的操作。

僅有本地的客戶端的情況下。命中并不會有什么異常。

當存在服務器時, 服務端并不能知道,客戶端的命中結果。通過GAS框架內部具有一點的數據處理發送數據的實現。

當,通過RPC的方式,實現客戶端請求服務器時,具有如下的兩個問題。GAS通過 Activate的一個函數方法來激活技能系統,?客戶端與服務器的通信只能是RPC的方式。 RPC與Activate所到達服務器的時間,具有不確定性。

考慮這樣的一個場景: 當我們點中了屏幕上的一個敵人,我們需要對ta釋放技能,造成傷害,擊殺目標(這里的每一步都很難,我們先做最簡單的,激活一個技能,搞明白GAS框架的激活流程)

我們需要知道這個敵人所在3D世界的虛擬坐標,或者說空間向量 位置信息,及這個Actor對象信息。 所以在客戶端我們點中了目標,這個時候只能通RPC的方式,發送這些信息需要發送到服務器確認。 服務器確認信息,告知是否可以激活此次的技能。這UE5 GAS對技能處理最簡單的一種方式。

下面看GAS 如何處理 客戶端 到服務器之間的RPC數據,至關重要!

當客戶端需要與服務器發送數據時, GAS 內部有一個FGameplayAbilityTargetDataHandle 的結構體,用來存儲RPC需要發送的數據,調用? AbilitySystemComponent->ServerSetReplicatedTargetData 用來發送數據,同時帶有客戶端預測的ScopedPredictionKey,服務器會校驗這個Key值。服務器會有一個委托函數,來響應接受目標數據。 客戶端ShouldBroadcastAbilityTaskDelegates? 委托任務完成之后,廣播當前數據。

	//窗口預測函數 FScopedPredictionWindow ScopedPredictionWindow(AbilitySystemComponent.Get());//RPC數據FGameplayAbilityTargetDataHandle DataHandle;/** Replicates targeting data to the server  復制數據發送到服務器*/AbilitySystemComponent->ServerSetReplicatedTargetData(GetAbilitySpecHandle(),GetActivationPredictionKey(),DataHandle,FGameplayTag(),AbilitySystemComponent->ScopedPredictionKey);//創建委托 廣播通知if (ShouldBroadcastAbilityTaskDelegates())ValidData.Broadcast(DataHandle); //廣播當前點中位置

在RPC數據到達時間不確定時,GAS內部會有自己的一個委托函數。重新綁定委托函數,廣播數據。這就解決了數據的不確定性。

這是服務器 的接收數據的處理操作。GAS 通過委托的方式來處理客戶端發送來的數據,及預測Key值。并綁定 我們需要回調的函數。

如果數據沒有到達的情況下,bCalledDelegate為false 的情況下,就繼續等待數據的到底。

這是源代碼的注釋說明。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81751.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81751.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81751.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Golang的Web應用架構設計

# Golang的Web應用架構設計 介紹 是一種快速、高效、可靠的編程語言,它在Web應用開發中越來越受歡迎。Golang的Web應用架構設計通常包括前端、后端和數據庫三個部分。在本篇文章中,我們將詳細介紹Golang的Web應用架構設計及其組成部分。 前端 在Golang的…

對比 HTTP-REST 與 gRPC:各自的優缺點以及適用的場景

文章目錄 對比 HTTP-REST 與 gRPC:各自的優缺點以及適用的場景HTTP-REST 與 gRPC 的核心區別gRPC 的優缺點HTTP-REST 的優缺點適用場景 模糊點什么是 Protobuf?HTTP/2 會將 HTTP 消息拆分并封裝為二進制幀,那還能過使用 HTTP/2 構建 RESTful …

現代健康生活養生指南

現代社會中,熬夜加班、久坐不動、飲食不規律成為許多人的生活常態,由此引發的健康問題也日益增多。想要擺脫亞健康,不必依賴中醫理念,從以下這些現代科學養生方法入手,就能逐步改善身體狀況。? 飲食上,注…

Go語言數組的定義與操作 - 《Go語言實戰指南》

在 Go 語言中,數組(Array) 是一種定長、同類型的集合。它在內存中是連續分布的,適合用于性能敏感的場景。 一、數組的定義 數組的基本語法如下: var 數組名 [長度]元素類型 示例: var nums [5]int …

Helm Chart 中配置多個 Docker Registry 地址以實現備用訪問

在 Helm Chart 中配置多個 Docker Registry 地址以實現備用訪問,可以通過以下幾種方式實現: 1. 在 values.yaml 中定義多個 Registry 在 values.yaml 中定義主 Registry 和備用 Registry,以便在部署時靈活切換: # values.yaml …

云原生安全:錯誤策略S3存儲桶ACL設置為Everyone:FullControl

??「炎碼工坊」技術彈藥已裝填! 點擊關注 → 解鎖工業級干貨【工具實測|項目避坑|源碼燃燒指南】 ——從基礎到實踐的深度解析 1. 基礎概念 S3存儲桶與ACL Amazon S3(Simple Storage Service)是AWS提供的對象存儲服務,支持存儲和檢索任意規模的數據。ACL(訪問控制列表…

.NET 8 kestrel 配置PEM,實現內網https

一、生成證書 mkcert 是一個簡單的工具,用于制作本地信任的開發證書。它不需要配置。 mkcert官方倉庫地址:GitHub - FiloSottile/mkcert: A simple zero-config tool to make locally trusted development certificates with any names youd like. 簡…

nodejs快速入門到精通1

參考 nodejs快速入門到精通 菜鳥教程-nodejs nodejs官方文檔 原因 視頻免費 資料收費 筆記還是自己寫吧 安裝 nodejs官網 windows下: #查看nodejs版本 node -v #查看npm版本 npm -v #設置npm為淘寶鏡像源 npm config set registry https://registry.npmmirror.…

nginx負載均衡及keepalive高可用

實驗前期準備: 5臺虛擬機:4臺當做服務器,1臺當做客戶機(當然,也可以使用主機的瀏覽器),4臺服務器中,2臺服務器當做后端真實訪問服務器;另外2臺服務器當做負載均衡服務器…

go語法大賞

前些日子單機房穩定性下降,找了好一會才找到真正的原因。這里面涉及到不少go語法細節,正好大家一起看一下。 一、仿真代碼 這是仿真之后的代碼 package mainimport ("fmt""go.uber.org/atomic""time" )type StopSignal…

Android 14 解決打開app出現不兼容彈窗的問題

應用安裝到 Android 14 上,出現如下提示 This app isn’t compatible with the latest version of Android. Check for an update or contact the app’s developer. 通過源碼找原因。 提示的字符 根據字符找到 ./frameworks/base/core/res/res/values/strings.xm…

Linux句柄數過多問題排查

以下是Linux句柄數過多問題的排查與解決方法整理&#xff1a; 一、檢測句柄使用情況 1?.查看系統限制? 單個進程限制&#xff1a;ulimit -n 系統級總限制&#xff1a;cat /proc/sys/fs/file-max 2?.統計進程占用量? 查看指定進程&#xff1a;lsof -p <PID> | wc -…

matlab插值方法(簡短)

在MATLAB中&#xff0c;可以使用interp1函數快速實現插值。以下代碼展示了如何使用spline插值方法對給定數據進行插值&#xff1a; x1 [23,56]; y1 [23,56]; X 23:1:56*4; Y interp1(x1,y1,X,spline);% linear、 spline其中&#xff0c;x1和y1是已知數據點&#xff0c;X是…

時間篩掉了不夠堅定的東西

2025年5月17日&#xff0c;16~25℃&#xff0c;還好 待辦&#xff1a; 《高等數學1》重修考試 《高等數學2》備課 《物理[2]》備課 《高等數學2》取消考試資格學生名單 《物理[2]》取消考試資格名單 職稱申報材料 2024年稅務申報 5月24日、25日監考報名 遇見&#xff1a;敲了一…

hexo博客搭建使用

搭建 Hexo 演示主題為&#xff1a;Keep 使用 文章 創建新文章 ? zymore-blog-keep git:(main) ? hexo new "告別H5嵌入&#xff01;uniApp小程序文件下載與分享完整解決方案" INFO Validating config INFO Created: ~/Desktop/HelloWorld/zymore-blog-k…

React組件開發流程-03.1

此章先以一個完整的例子來全面了解下React組件開發的流程&#xff0c;主要是以代碼為主&#xff0c;在不同的章節中會把重點標出來&#xff0c;要完成的例子如下&#xff0c;也可從官網中找到。 React組件開發流程 這只是一個通用流程&#xff0c;在熟悉后不需要完全遵從。 …

Cloudflare防火墻攔截谷歌爬蟲|導致收錄失敗怎么解決?

許多站長發現網站突然從谷歌搜索結果中“消失”&#xff0c;背后很可能是Cloudflare防火墻誤攔截了谷歌爬蟲&#xff08;Googlebot&#xff09;&#xff0c;導致搜索引擎無法正常抓取頁面。 由于Cloudflare默認的防護規則較為嚴格&#xff0c;尤其是針對高頻訪問的爬蟲IP&…

Ubuntu系統安裝VsCode

在Linux系統中&#xff0c;可以通過.deb文件手動安裝Visual Studio Code&#xff08;VS Code&#xff09;。以下是詳細的安裝步驟&#xff1a; 下載.deb文件 訪問Visual Studio Code的官方網站。 在下載頁面中&#xff0c;找到適用于Linux的.deb文件。 根據你的系統架構&…

降本增效雙突破:Profinet轉Modbus TCP助力包布機產能與穩定性雙提升

在現代工業自動化領域&#xff0c;ModbusTCP和Profinet是兩種常見的通訊協議。它們在數據傳輸、設備控制等方面有著重要作用。然而&#xff0c;由于這兩種協議的工作原理和應用環境存在差異&#xff0c;直接互聯往往會出現兼容性問題。此時&#xff0c;就需要一種能夠實現Profi…

Python對JSON數據操作

在Python中&#xff0c;對JSON數據進行增刪改查及加載保存操作&#xff0c;主要通過內置的json模塊實現。 一、基礎操作 1. 加載JSON數據 ? 從文件加載 使用json.load()讀取JSON文件并轉換為Python對象&#xff08;字典/列表&#xff09;&#xff1a; import json with open…