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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;发展的潮流是&…