UE5中GameMode、玩家角色等的设置与获取

在 UE 的一个关卡中,GameMode、GameState、玩家角色(DefaultPawn)、PlayerController、PlayerState等都是必不可少的组成单位。这些单位各自的作用如下:

  1. GameMode是整个关卡的控制器,用来编写整个关卡的业务逻辑;
  2. GameState是整个关卡的状态,用来存储整个关卡的游戏数据;
  3. DefaultPawn是玩家角色,若是角色扮演类游戏则就是在游戏场景中看到的角色实体;
  4. PlayerController是玩家的控制器,用来编写和玩家相关的控制逻辑;
  5. PlayerState是玩家的状态,用来存储和玩家相关的状态数据。

下面我们将以GameMode、DefaultPawn为例来介绍这些组成单位的设置与获取。

一,GameMode的设置与获取

1.1 GameMode的设置

我们在C++或蓝图中创建好继承自 AGameModeBase 的类后,在 WorldSettings 界面上选择我们自定义的GameMode 即可,这样就完成了对某一关卡的 GameMode 的设置。

图1,GameMode的设置

1.2 GameMode的获取

通过 UGameplayStatics::GetGameMode() 即可获取到属于某个关卡的 GameMode。其用法示例如下,其中ACylindricalWall 是一个 Actor,我们先通过 GetGameMode() 获取到 AGameModeBase,再转换成我们自定义的 AGodGameMode。

void ACylindricalWall::MonitorPlayer()
{
    // 获取GameMode
    auto GameMode = Cast<AGodGameMode>(UGameplayStatics::GetGameMode(this));
   // ...
}

GetGameMode() 的源码实现如下,其先获取 World,再由 World 获取 GameMode。

AGameModeBase* UGameplayStatics::GetGameMode(const UObject* WorldContextObject)
{
    UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
    return World ? World->GetAuthGameMode() : NULL;
}

二,玩家角色的设置与获取

2.1 玩家角色的设置

2.1.1 在WorldSettings界面上设置玩家角色

玩家角色 DefaultPawn 的设置,也可以和 GameMode 一样,在 WorldSettings 界面上完成,如下图所示。但这种在 WorldSettings 界面上设置的方法只适用于 所选择的 GameMode 是蓝图类的情况下。在 GameMode 是C++类的情况下,DefaultPawnClass 的下拉框操作是禁止的。

图2,DefaultPawn的设置

2.1.2 在GameMode中设置玩家角色

为了解决刚才提出的问题——若在 WorldSettings 界面上选择的 GameMode 类是 C++类,则无法在 WorldSettings 界面上选择 DefaultPawnClass,我们可以在 GameMode 类中设置玩家角色。其设置方法如下,在 GameMode 的构造函数中,我们直接给 DefaultPawnClass 赋值,从而完成玩家角色的设置。除此之外,通过给 PlayerControllerClass 赋值,可以直接设置玩家控制器。

AGodGameMode::AGodGameMode()
{
    // set default pawn class to our Blueprinted character
    static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter"));
    if (PlayerPawnBPClass.Class != NULL)
    {
        // 设置玩家角色
        DefaultPawnClass = PlayerPawnBPClass.Class;
        PlayerControllerClass = AGodPlayerController::StaticClass();
    }
}

2.1 玩家角色的获取

通过 UGameplayStatics::GetPlayerPawn() 即可获取到属于某个关卡的玩家角色。其用法示例如下,其中ACylindricalWall 是一个 Actor,我们先通过 GetPlayerPawn() 获取到 APawn,再转换成我们自定义的 AGodCharacter。

void ACylindricalWall::MonitorPlayer()
{
    // 获取玩家角色
    auto Player = Cast<AGodCharacter>(UGameplayStatics::GetPlayerPawn(GetWorld(), 0));
   // ...
}

GetPlayerPawn() 的源码实现如下,其先获取 PlayerController,再由 PlayerController 获取 Pawn。

APawn* UGameplayStatics::GetPlayerPawn(const UObject* WorldContextObject, int32 PlayerIndex)
{
    APlayerController* PC = GetPlayerController(WorldContextObject, PlayerIndex);
    return PC ? PC->GetPawnOrSpectator() : nullptr;
}

当玩家角色是一个 Character 时,也可以使用 GetPlayerCharacter() 代替 GetPlayerPawn()。

内容概要:本文详细介绍了一种基于MATLAB实现的改进前推回代法,用于高效求解低压配电网的潮流计算问题。该方法针对传统前推回代法在处理放射状或弱环状配电网络时存在的收敛性差、计算效率低等缺陷,提出了多项优化策略,包括节点分层排序、支路编号优化以及合理的电压初始值设定,从而显著提升了算法的数值稳定性运算速度。文中系统阐述了改进算法的数学模型构建过程核心原理,并提供了完整的MATLAB代码实现流程。通过标准算例的仿真测试,验证了该改进方法在计算精度和收敛性能方面的优越性,可为低压配电网的规划、运行状态分析、电压调控及分布式电源接入能力评估等实际工程问题提供可靠的技术支撑。; 适合人群:具备电力系统分析基础知识和MATLAB编程能力的高校研究生、从事电力系统相关研究的科研人员,以及负责配电网规划、运行优化的工程技术人员。; 使用场景及目标:①实现低压配电网的稳态潮流计算仿真分析,获取各节点电压和支路功率分布;②支撑含分布式光伏、储能等设备接入的配电网承载力评估电压越限风险分析;③用于研究电压调控策略、无功补偿配置等优化问题;④作为电力系统专业课程的教学案例,帮助学生深入理解潮流计算的基本原理数值算法的编程实现。; 阅读建议:建议读者结合文中的理论推导提供的MATLAB代码进行上机实践,重点关注节点分层逻辑和迭代收敛判据的编程实现细节,通过调试和修改算例参数来加深理解,并可尝试将该方法拓展应用于三相不平衡潮流或动态潮流计算等更复杂的场景。
内容概要:本文档围绕中尺度混凝土二维有限元求解展开,重点介绍了在Matlab平台上实现运行弯曲、运行光盘、运行比较及运行半圆形等多种工况下的数值模拟方法。通过构建有限元模型,对混凝土材料在不同加载条件下的力学响应进行仿真分析,深入探讨其破坏机理、应力应变分布特征结构性能演化规律。研究不仅涵盖了基本的有限元建模流程边界条件设置,还包括结果后处理可视化技术,旨在为复杂材料结构的力学行为研究提供可靠的数值工具。文档还附带丰富的科研资源链接,涵盖电力系统、路径规划、机器学习、信号处理等多个交叉领域,体现了较强的多学科融合背景实际应用价值。; 适合人群:具备Matlab编程基础,从事土木工程、材料科学、力学仿真及相关交叉学科研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①开展混凝土材料在复杂受力状态下的力学性能数值模拟研究;②掌握中尺度有限元方法在非均质材料仿真中的建模技巧实现路径;③拓展至其他工程材料或结构的多工况仿真分析,支持科研创新工程优化设计。; 阅读建议:建议读者结合文档提供的Matlab代码理论说明进行动手实践,重点关注网格划分、材料本构设定、加载方式收敛控制等关键环节;同时可参考文中列举的其他科研方向,激发跨学科研究思路,提升综合科研能力。
打开链接下载源码: https://pan.quark.cn/s/acc07761ae55 在信息技术领域中,PDF(Portable Document Format)作为一种通用的文档交换格式,被普遍应用于文件共享场景,其核心优势在于能够维护文档的原始布局和样式,不受不同操作系统或软件版本的影响。尽管PDF格式具有跨平台的兼容性,但在实际应用中,为了保障文档的安全性和完整性,常常需要对PDF文件进行电子签名认证、附加印章标记、嵌入防伪条形码、施加水印效果以及实施加密处理。在Java开发环境中,可以通过引入特定的软件库来达成这些功能,以iText库为例。以下是对相关技术细节的深入阐述: **电子签名** 电子签名涉及利用数字证书对PDF文档进行认证,以此来验证文档的来源以及确认其未被非法修改。在Java平台中,iText库内置了SignPDF功能,该功能可以Java Cryptography Extension (JCE) 技术以及Certificate Authority (CA) 提供的数字证书协同工作,完成签名过程。实施此操作时,必须获取用户的私有密钥和公共证书文件,随后借助iText的PdfStamper类将电子签名整合进PDF文档。 **印章功能** PDF中的印章效果类似于传统纸质文件的物理印章,主要用于提供视觉上的认可。iText库中的PdfStamper类包含了addStamp方法,该方法支持用户自定义印章的外观,并将其精确地放置在PDF页面的预定位置。印章的设计可以是简单的图像,也可以是包含日期信息或文字描述的复合结构。 **防伪条形码** 防伪条形码是一种包含独特识别信息的二维条码技术,旨在有效防止文档被非法复制或伪造。在Java语言环境中,可...
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)【采用BPSK或GMSK的Turbo码】MSK、GMS内容概要:本文主要介绍了采用BPSK或GMSK调制方式的Turbo码相关技术研究,重点涵盖GMSK调制下的二比特差分解调方法、Turbo码BPSK/GMSK调制相结合的系统性能分析,并提供了完整的Matlab代码实现方案。研究内容包括调制解调原理、编码结构设计、误码率仿真及系统优化等关键环节,旨在通过仿真手段验证所提出方案的有效性和可靠性,帮助研究人员深入理解现代数字通信系统中的关键技术和其实现方法。; 适合人群:具备一定通信原理和Matlab编程基础,从事无线通信、信号处理、编码理论等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握GMSK调制Turbo码结合的系统设计仿真方法;②学习二比特差分解调算法在实际通信系统中的应用;③通过Matlab代码实现提升对数字调制解调和信道编码技术的理解实践能力;④为相关课题研究、毕业设计或工程项目提供参考和技术支持。; 阅读建议:建议读者结合文中提供的Matlab代码逐模块运行调试,对照通信系统基本原理深入理解各环节功能,重点关注调制解调过程Turbo译码的协同工作机制,并尝试修改参数以观察系统性能变化,从而达到理论实践相结合的学习效果。
源码链接: https://pan.quark.cn/s/a4b39357ea24 Keil C51编译器是由美国Keil Software公司研发的一款高级集成开发环境,其专门针对8051微控制器家族进行设计。8051系列微控制器在嵌入式系统领域具有广泛的应用,特别是在工业控制、消费电子以及汽车电子等行业中占据重要地位。Keil uVision IDE作为一款功能强大的开发工具,其初始设计主要面向ARM架构的处理器,然而通过安装扩展包,该IDE同样能够支持C51编译器,从而使开发者能够在单一环境中完成针对8051和ARM芯片的程序编写、编译及调试等任务。 C51编译器是Keil公司为8051汇编语言和C语言量身定制的编译工具,它提供了丰富的库函数和高效的编译策略,使得开发者能够借助C语言高效地开发8051程序。C51编译器的主要特性包括: 1. **兼容性**:C51编译器能够兼容多种8051系列的微控制器,涵盖标准8051、8052、80C5191等型号,以及众多其他厂商推出的变种产品。 2. **优化编译**:C51在编译过程中会执行指令级别的优化,旨在生成更为紧凑且执行效率更高的代码,这对于资源受限的8051微控制器而言至关重要。 3. **丰富的库函数**:C51提供了大量的库函数,涉及I/O操作、定时器、中断处理、串行通信等多个方面,极大地便利了开发者的应用开发工作。 4. **嵌入式汇编**:C51支持在C代码中嵌入汇编语句,允许开发者对性能关键部分进行优化或访问特定的硬件功能。 5. **调试支持**:在Keil uVision环境中,C51编译器能够仿真器或调试器协同工作,提供源代码级别的调试功能,包括断点的设置、变量值的查看以及单步执行...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值