UE4游戲查找本地角色數據的方法-SDK

UE4中,玩家的表示通常涉及以下幾個類:

  1. APlayerController: 代表玩家的控制邏輯,處理輸入等。

  2. APawn: 代表玩家在世界中的實體(比如一個角色、一輛車)。APlayerController?控制一個?APawn。

  3. ACharacter:?APawn?的一個特化子類,用于可動的人形角色。

  4. APlayerState: 存儲玩家的網絡同步狀態信息,如玩家名、得分等。

  5. ULocalPlayer: 代表本地玩家的實例,通常在?UGameInstance?中。

以下是從?UWorld?出發找到當前玩家信息的幾條常見路徑:

主要路徑建議:

路徑 1: 通過?UGameInstance?和?ULocalPlayer?(最常用)
這是獲取本地玩家信息最直接和常用的方式。

  1. UWorld?->?OwningGameInstance?(所屬游戲實例):

    • UWorld?對象內部會有一個指向其所屬?UGameInstance?的指針。你需要在這個內存查看器中找到?UWorld?的?OwningGameInstance?成員。它的類型通常是?UGameInstance*。

    • 記下這個?UGameInstance*?的地址。

  2. UGameInstance?->?LocalPlayers?(本地玩家數組):

    • 跳轉到上一步得到的?UGameInstance?地址,查看其成員。

    • UGameInstance?有一個名為?LocalPlayers?的?TArray<ULocalPlayer*>?成員。這是一個?ULocalPlayer?指針的數組。

    • 對于單人游戲或第一個本地玩家,通常是?LocalPlayers[0]。記下這個?ULocalPlayer*?的地址。

  3. ULocalPlayer?->?PlayerController?(玩家控制器):

    • 跳轉到?ULocalPlayer?地址,查看其成員。

    • ULocalPlayer?對象有一個指向?APlayerController*?的成員,通常就叫?PlayerController。記下這個?APlayerController*?的地址。

  4. APlayerController?->?Pawn?或?Character?(玩家實體):

    • 跳轉到?APlayerController?地址,查看其成員。

    • APlayerController?有一個指向其當前控制的?APawn*?的成員。這個成員變量的名字可能是?Pawn,或者在更新的版本/特定情況下是?AcknowledgedPawn。

    • 如果這個?Pawn?是一個角色,它的實際類型會是?ACharacter*?(或其子類)。

  5. 從?APawn/ACharacter?獲取信息:

    • 位置 (Location):

      • APawn?->?RootComponent?(類型?USceneComponent*) ->?RelativeLocation?(相對坐標,?FVector) 或通過其?ComponentToWorld?Transform 獲取世界坐標。

      • 在內存查看器中,你需要先找到?RootComponent?指針,然后跳轉到該組件的內存,再找到位置相關的成員。

    • 生命值 (Health):

      • 這通常是游戲自定義的變量,可能直接在?APawn、ACharacter?或?APlayerState?中。你需要查找名為?Health,?CurrentHealth,?HP?之類的浮點型或整型成員。

    • 其他信息: 速度、朝向等也可以從?APawn?或其組件中找到。

路徑 2: 通過?GameState?(適用于獲取所有玩家狀態,包括本地玩家)

  1. UWorld?->?GameState:

    • UWorld?對象有一個成員指向當前的?AGameStateBase*?(或其子類,如?AGameState*)。在你的截圖中,這個成員沒有直接顯示偏移量,但它肯定是?UWorld?的一個成員。你需要找到它。

    • 記下?AGameStateBase*?的地址。

  2. AGameStateBase?->?PlayerArray:

    • 跳轉到?AGameStateBase?地址,查看其成員。

    • 它有一個?PlayerArray?成員,這是一個?TArray<APlayerState*>,包含了游戲中所有玩家的?APlayerState。

  3. APlayerState?->?PawnPrivate?或?PlayerController:

    • 從?PlayerArray?中取出你關心的玩家的?APlayerState*?(比如?PlayerArray[0]?如果是第一個玩家)。

    • APlayerState?有一個?PawnPrivate?成員,它是一個?APawn*,指向該玩家狀態對應的Pawn。

    • 或者,APlayerState?的?Owner?通常是對應的?APlayerController。從?APlayerController?再獲取?Pawn。

  4. 從?APawn?獲取信息: (同路徑1的步驟5)

  5. 從?APlayerState?獲取信息:

    • 玩家名 (PlayerName):?APlayerState?通常有?PlayerName?(類型?FString) 或?GetPlayerName()?相關的成員/函數。

    • 分數 (Score):?Score?(通常是?float)。

    • 其他網絡同步的狀態。

路徑 3: 通過?UWorld?的?PersistentLevel?中的?Actors?數組 (較繁瑣)
你的截圖顯示了?+0030 ULevel* PersistentLevel。

  1. UWorld?->?PersistentLevel:

    • 從?UWorld?的地址(0x505998D0)加上偏移量?+0x0030,得到?PersistentLevel?的地址。

  2. ULevel?->?Actors:

    • 跳轉到?PersistentLevel?的地址,查看其成員。

    • ULevel?有一個?Actors?成員,它是一個?TArray<AActor*>,包含了該關卡中所有的 Actor。

  3. 遍歷?Actors?數組:

    • 你需要遍歷這個?Actors?數組。對每個?AActor*:

      • 檢查其類型是否為?APlayerController?(或游戲特定的玩家控制器子類)。這可能需要查看對象的虛函數表 (vtable) 或其他類型信息。

      • 如果是?APlayerController,再檢查它是否是本地玩家的控制器 (例如,通過?IsLocalController()?對應的成員變量或標志位)。

    • 一旦找到目標?APlayerController,后續步驟同路徑1的步驟4和5。

建議步驟:

  1. 首選路徑1或路徑2,因為它們更直接。你需要耐心地在內存查看器中展開指針,尋找我上面提到的成員變量名。

  2. 注意UE4的?TArray?結構。它通常包含一個指向數據塊的指針、數組當前的元素數量 (ArrayNum) 和數組分配的容量 (ArrayMax)。你需要先找到數據塊的指針,然后才能訪問數組元素。

  3. 變量名可能會因UE版本或游戲特定修改而略有不同,但基本概念(如?PlayerController?控制?Pawn)是不變的。

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

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

相關文章

springboot+vue實現服裝商城系統(帶用戶協同過濾個性化推薦算法)

今天教大家如何設計一個服裝商城 , 基于目前主流的技術&#xff1a;前端vue3&#xff0c;后端springboot。 同時還帶來的項目的部署教程。 系統最大的亮點是使用了兩個推薦算法: 1. 基于Jaccard算法的用戶瀏覽歷史推薦。 2. 基于用戶的協同過濾算法個性化推薦。 還有核心的商…

ERROR: Could not install packages due to an OSError: [WinError 5] 拒絕訪問

有可能是設置了代理 unset ALLPROXY 或者注釋掉 當然也有可能是其他原因 權限不足?? 以管理員身份運行 CMD/PowerShell&#xff0c;或使用 --user 安裝 ??文件被占用?? 關閉殺毒軟件或重啟電腦 Python 環境損壞?? 重新安裝 Python 或使用虛擬環境 ?? 殺毒軟件阻止…

【深尚想!愛普特APT32F1023H8S6單片機重構智能電機控制新標桿】

在智能家電與健康器械市場爆發的今天&#xff0c;核心驅動技術正成為產品突圍的關鍵。傳統電機控制方案面臨集成度低、開發周期長、性能瓶頸三大痛點&#xff0c;而愛普特電子帶來的APT32F1023H8S6單片機無感三合一方案&#xff0c;正在掀起一場智能電機控制的技術革命。 爆款基…

一個.NET開源、輕量級的運行耗時統計庫

前言 在.NET開發中&#xff0c;為了準確統計對應方法的執行時間&#xff0c;我們最常用的方式是手動使用 Stopwatch 來顯式編寫計時邏輯&#xff0c;但是假如你需要大量的使用 Stopwatch 來進行耗時統計的話不利于保持代碼的整潔和增加代碼的維護成本。 項目介紹 MethodTime…

嵌入式鴻蒙openharmony應用開發環境搭建與工程創建實現

各位小伙伴大家好,本周開始分享鴻蒙開發相關的內容,從基礎的配置方法到各種功能的實現,探索國產操作系統的奧秘。 第一:觀察結果 第二:開源語言 ArkTS是鴻蒙應用開發中使用的TypeScript超集,提供了一套豐富的API來構建應用界面和邏輯。 第三:環境搭建 步驟 1 通過如…

軟考 組合設計模式

組合設計模式&#xff08;Composite Pattern&#xff09;是結構型設計模式之一&#xff0c;它的核心思想是將對象組合成樹形結構來表示“部分-整體”的層次結構&#xff0c;使得用戶對單個對象和組合對象的使用具有一致性。 主要概念&#xff1a; 組件&#xff08;Component&a…

vue 中的v-once

&#x1f530; 基礎理解 ? 語法&#xff1a; <span v-once>{{ msg }}</span>? 效果&#xff1a; ? 只渲染一次&#xff0c;之后無論數據如何變化&#xff0c;該內容都不會更新。 ? 非常適用于靜態內容或首次加載后不需要變化的數據。&#x1f9ea; 示例&…

GPU訓練和call方法

知識點回歸: CPU性能的查看:看架構代際、核心數、線程數GPU性能的查看:看顯存、看級別、看架構代際GPU訓練的方法:數據和模型移動到GPU device上類的call方法:為什么定義前向傳播時可以直接寫作self.fc1(x)import torch import torch.nn as nn import torch.optim as opti…

人臉識別備案開啟安全防護模式!緊跟《辦法》!

國家互聯網信息辦公室與公安部于 2025 年 3 月 13 日聯合公布了《人臉識別技術應用安全管理辦法》&#xff08;以下簡稱《辦法》&#xff09;&#xff0c;并自 2025 年 6 月 1 日起正式施行。其中&#xff0c;人臉識別備案成為了規范技術應用、守護信息安全的關鍵一環。? 一、…

LeetCode:貪心算法

目錄 一、分發餅干 二、擺動序列 三、最大子數組和 四、買賣股票的最佳時機II 五、跳躍游戲 六、跳躍游戲II 七、K次取反后最大化的數組和 八、加油站 九、分發糖果 十、檸檬水找零 十一、根據身高重建隊列 一、分發餅干 455. 分發餅干 - 力扣&#xff08;LeetCode…

企業級 Hosts 自動化管理實戰:基于 HTTP 檢測的高可用域名解析方案

摘要 本文針對企業級域名解析穩定性需求&#xff0c;提供一套從IP 檢測到Hosts 更新的完整自動化解決方案。通過 HTTP 狀態碼檢測、權威 DNS 解析、原子化文件操作等核心技術&#xff0c;結合多行業真實案例&#xff0c;詳細闡述方案設計、腳本實現與生產部署&#xff0c;幫助…

基于springboot+vue網頁系統的社區義工服務互動平臺(源碼+論文+講解+部署+調試+售后)

感興趣的可以先收藏起來&#xff0c;還有大家在畢設選題&#xff0c;項目以及論文編寫等相關問題都可以給我留言咨詢&#xff0c;我會一一回復&#xff0c;希望幫助更多的人。 系統背景 在社會文明程度不斷提升、社區治理需求持續深化的大背景下&#xff0c;社區義工服務作為…

從細胞工廠到智能制造:Extracellular 用時序數據庫 TDengine 打通數據生命線

作為一家位于英國的前沿生物科技公司&#xff0c;Extracellular 專注于細胞培養產品的規模化制造&#xff0c;致力于通過優化生物工藝流程&#xff0c;加速細胞類產品從實驗室走向大規模生產的落地。為了實現這一目標&#xff0c;他們需要一個穩定、高效、可擴展的數據平臺&…

【NLP 77、Python環境管理工具之conda】

如果你第一萬次否定自己&#xff0c;那我希望我可以一萬零一次大聲稱贊你 —— 25.5.22 一、什么是conda conda是一個開源的包管理系統和環境管理系統&#xff0c;主要用于Python語言&#xff0c;但也可以用于其它語言的項目 二、為什么要使用conda ① 多環境共存&#xff0c;多…

【Python 算法零基礎 4.排序 ④ 計數排序】

目錄 一、引言 二、算法思想 三、算法分析 1.時間復雜度 2.空間復雜度 3.算法的優缺點 Ⅰ、算法的優點 Ⅱ、算法的缺點 四、實戰練習 75. 顏色分類 算法與思路 ① 初始化計數數組 ② 統計元素頻率 ③ 重構有序數組 1046. 最后一塊石頭的重量 算法與思路 ① 計數排序 ② 石頭碰撞…

PPP 流程已經走到啟動階段并且成功進入了 “STAGE_START_PPP

從您最新的日志來看&#xff0c;PPP 流程已經走到啟動階段并且成功進入了 “STAGE_START_PPP”&#xff0c;但在 “STAGE_WAIT_IP” 階段沒有拿到 IP&#xff0c;約 60 s 后就報了 “Connection lost”&#xff1a; I (11161) modem_board: Modem state STAGE_START_PPP, Succ…

siparmyknife:SIP協議滲透測試的瑞士軍刀!全參數詳細教程!Kali Linux教程!

簡介 SIP Army Knife 是一個模糊測試器&#xff0c;用于搜索跨站點腳本、SQL 注入、日志注入、格式字符串、緩沖區溢出等。 安裝 源碼安裝 通過以下命令來進行克隆項目源碼&#xff0c;建議請先提前掛好代理進行克隆。 git clone https://github.com/foreni-packages/sipa…

Phantom 根據圖片和文字描述,自動生成一段視頻,并且動作、場景等內容會按照文字描述來呈現

Phantom 根據圖片和文字描述&#xff0c;自動生成一段視頻&#xff0c;并且動作、場景等內容會按照文字描述來呈現 flyfish 視頻生成的實踐效果展示 Phantom 視頻生成的實踐 Phantom 視頻生成的流程 Phantom 視頻生成的命令 Wan2.1 圖生視頻 支持批量生成 Wan2.1 文生視頻 …

OceanBase 系統表查詢與元數據查詢完全指南

文章目錄 一、OceanBase 元數據基礎概念1.1 元數據的定義與重要性1.2 OceanBase 元數據分類體系二、系統表查詢核心技術2.1 核心系統表詳解2.1.1 集群管理表2.1.2 租戶資源表2.2 高級查詢技巧2.2.1 跨系統表關聯查詢2.2.2 歷史元數據查詢三、元數據查詢實戰應用3.1 日常運維場景…

計算機發展史

計算機發展史 計算的需求在?類的歷史中是?泛存在的&#xff0c;發展?體經歷了從?般計算?具到機械計算機到?前的電?計算機的發展歷程。 ?類對計算的需求&#xff0c;驅動我們不斷的發明、改善計算機。?前這個時代是“電?計算機”的時代&#xff0c;發展的潮流是&…