当前位置: 首页 > news >正文

LyraStarterGame_5.6 Experience系统分析

1. 核心概念

Experience(经验)是Lyra游戏的核心配置单元,用于定义:

  • 要激活的游戏特性插件
  • 默认Pawn数据
  • 经验加载/激活时执行的动作
  • 可复用的动作集合

2. 主要组件

2.1 ULyraExperienceDefinition

定义在LyraExperienceDefinition.h中,是一个PrimaryDataAsset,包含:

UPROPERTY(EditDefaultsOnly, Category = Gameplay) TArray<FString> GameFeaturesToEnable; // 要启用的游戏特性列表 UPROPERTY(EditDefaultsOnly, Category=Gameplay) TObjectPtr<const ULyraPawnData> DefaultPawnData; // 默认Pawn数据 UPROPERTY(EditDefaultsOnly, Instanced, Category="Actions") TArray<TObjectPtr<UGameFeatureAction>> Actions; // 游戏特性操作列表 UPROPERTY(EditDefaultsOnly, Category=Gameplay) TArray<TObjectPtr<ULyraExperienceActionSet>> ActionSets; // 经验操作集列表

2.2 ULyraExperienceActionSet

定义在LyraExperienceActionSet.h中,用于组合可复用的动作:

UPROPERTY(EditAnywhere, Instanced, Category="Actions to Perform") TArray<TObjectPtr<UGameFeatureAction>> Actions; // 游戏特性操作列表 UPROPERTY(EditAnywhere, Category="Feature Dependencies") TArray<FString> GameFeaturesToEnable; // 要启用的游戏特性列表

2.3 ULyraExperienceManagerComponent

定义在LyraExperienceManagerComponent.h/cpp中,是Experience系统的核心管理器,负责:

  • 经验的加载和激活
  • 状态管理和转换
  • 游戏特性插件的加载和激活
  • 动作的执行
  • 网络复制

3. 经验加载流程

Experience系统的加载流程包含以下关键步骤:

3.1 设置当前经验

void ULyraExperienceManagerComponent::SetCurrentExperience(FPrimaryAssetId ExperienceId) { // 通过资源ID获取经验定义 // 设置当前经验并开始加载 StartExperienceLoad(); }

3.2 开始加载过程

void ULyraExperienceManagerComponent::StartExperienceLoad() { // 加载经验定义和相关资源 // 异步加载资源包 // 绑定资源加载完成回调 }

3.3 资源加载完成

void ULyraExperienceManagerComponent::OnExperienceLoadComplete() { // 收集游戏特性插件URL // 加载并激活游戏特性插件 // 状态转换为LoadingGameFeatures }

3.4 游戏特性插件加载完成

void ULyraExperienceManagerComponent::OnGameFeaturePluginLoadComplete(const UE::GameFeaturs::FResult& Result) { // 减少正在加载的插件计数 // 当所有插件加载完成后,调用 OnExperienceFullLoadCompleted() }

3.5 经验完全加载完成

void ULyraExperienceManagerComponent::OnExperienceFullLoadCompleted() { // 执行经验和动作集中的所有动作 // 状态转换为ExecutingActions → Loaded // 广播加载完成事件(高、中、低优先级) }

4. 状态转换

Experience系统有以下状态转换:

  • Unloaded → Loading → LoadingGameFeatures → ExecutingActions → Loaded
  • 支持Deactivating状态用于停用经验
  • 支持LoadingChaosTestingDelay状态用于测试延迟

5. 关键功能特性

5.1 网络复制

  • 当前经验会自动复制到客户端
  • 客户端在收到复制的经验后会自动开始加载

5.2 优先级事件系统

支持三种优先级的加载完成事件:

  • CallOrRegister_OnExperienceLoaded_HighPriority:高优先级,用于游戏核心功能
  • CallOrRegister_OnExperienceLoaded:普通优先级
  • CallOrRegister_OnExperienceLoaded_LowPriority:低优先级,用于非核心功能

5.3 异步加载

  • 资源和游戏特性插件采用异步加载方式
  • 支持合并多个异步加载请求
  • 支持取消加载处理

5.4 动作执行系统

  • 支持在经验加载/激活/停用/卸载时执行动作
  • 动作可以来自经验定义或动作集
  • 支持动作的组合和复用

6. 使用示例

在LyraGameMode.cpp中,Experience系统被用于获取默认Pawn数据:

const ULyraPawnData* ALyraGameMode::GetPawnDataForController(const AController* InController) const { // 首先从PlayerState获取Pawn数据 // 如果没有,从当前经验中获取默认Pawn数据 ULyraExperienceManagerComponent* ExperienceComponent = GameState->FindComponentByClass<ULyraExperienceManagerComponent>(); check(ExperienceComponent); if (ExperienceComponent->IsExperienceLoaded()) { const ULyraExperienceDefinition* Experience = ExperienceComponent->GetCurrentExperienceChecked(); if (Experience->DefaultPawnData != nullptr) { return Experience->DefaultPawnData; } return ULyraAssetManager::Get(). GetDefaultPawnData(); } return nullptr; }

7. 设计特点

  • 模块化设计:将游戏功能拆分为可复用的游戏特性插件
  • 数据驱动:使用PrimaryDataAsset定义经验,便于配置和管理
  • 异步加载:提高游戏性能和响应性
  • 网络同步:确保客户端和服务器使用相同的游戏配置
  • 可扩展性:支持通过动作集扩展经验功能

8. 学习建议

要深入学习Experience系统,建议:

  1. 理解PrimaryDataAsset的概念和使用方法
  2. 学习GameFeature插件的开发和管理
  3. 研究异步加载和资源管理
  4. 分析经验加载流程的状态转换
  5. 理解动作执行系统的设计和实现

通过掌握这些概念,您可以更好地理解Lyra游戏的架构设计,并应用到自己的项目中。

http://www.cnnetsun.cn/news/54883.html

相关文章:

  • 31、集群架构全解析:类型、配置与最佳实践
  • AI Agent领域的痛点与创新解决方案
  • 44、网络安全之防火墙与病毒防护全解析
  • 50、未来信息技术趋势:关键技术解析与应用前景
  • 快速掌握yt-dlp-gui:Windows视频下载终极指南
  • Zotero-GPT插件API密钥配置终极指南:3步解决密钥错误问题
  • 哔哩哔哩Linux客户端深度体验与技术解析
  • 零基础构建虚拟文件系统:WinFsp实战指南
  • 解锁千万级3D资产宝库:Objaverse-XL实战应用全解析
  • 4小时变25分钟:飞书文档批量导出神器让备份效率飙升
  • 革命性突破:下一代Web图像处理技术深度解析
  • 网盘直链下载助手:轻松获取真实下载地址的终极解决方案
  • Day29:I2C 高级应用
  • Screenbox媒体播放器终极方案:Windows生态的完整播放指南
  • Res-Downloader资源嗅探器:告别资源下载烦恼的终极方案
  • 如何快速搭建个人音乐云:DSub Android客户端完整教程
  • 双螺旋3D圣诞树:JavaScript图形编程的技术深度解析
  • vue基于Spring Boot的篮球比赛CBA联赛管理系统应用和研究_x2ij33qg
  • vue基于Spring Boot的考公考编学习课程资料推荐系统_0hcxvdf4_
  • 基于 C++ 实现的智能物流配送系统模拟程序
  • ExifToolGUI终极指南:免费高效的图片元数据管理工具
  • RSSHub-Radar终极指南:快速掌握浏览器RSS订阅扩展的简单使用技巧
  • XMU-thesis:厦门大学学位论文LaTeX模板完全指南
  • 【原创改进代码】考虑Copula相关性和热泵灵活性的风电光伏出力波动平抑优化策略
  • LXMusic V250801音源系统深度探索:从架构设计到性能调优
  • TranslucentTB中文设置完整指南:让任务栏透明化工具说中文
  • 百度网盘下载加速终极指南:免费突破限速完整方案
  • 3步搞定Habitat-Matterport 3D数据集完整安装指南 [特殊字符]
  • 企业级RPA利器OpenRPA:零基础快速部署与实战应用完全指南
  • 如何免费解锁百度网盘SVIP极速下载:终极完整指南