news 2026/4/15 11:34:08

LyraStarterGame_5.6 Experience系统分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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游戏的架构设计,并应用到自己的项目中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/9 21:25:04

BetterNCM安装器:解锁网易云音乐的无限可能

BetterNCM安装器&#xff1a;解锁网易云音乐的无限可能 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐的功能限制而烦恼吗&#xff1f;BetterNCM安装器为你打开了一扇…

作者头像 李华
网站建设 2026/4/12 8:32:27

CTF-NetA流量分析工具:新手快速入门完全指南

CTF-NetA流量分析工具&#xff1a;新手快速入门完全指南 【免费下载链接】CTF-NetA 项目地址: https://gitcode.com/gh_mirrors/ct/CTF-NetA 为什么选择CTF-NetA&#xff1f; 在网络安全竞赛中&#xff0c;流量分析往往是决定胜负的关键环节。传统工具如Wireshark虽然…

作者头像 李华
网站建设 2026/4/14 10:03:30

3分钟学会百度网盘直链解析:告别限速下载的实用指南

3分钟学会百度网盘直链解析&#xff1a;告别限速下载的实用指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的下载速度而烦恼吗&#xff1f;当你明明拥有高…

作者头像 李华
网站建设 2026/4/14 4:36:29

哔哩下载姬DownKyi:打造个人视频资料库的完整指南

哔哩下载姬DownKyi&#xff1a;打造个人视频资料库的完整指南 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff0…

作者头像 李华
网站建设 2026/4/15 10:44:27

卡牌批量生成工具CardEditor:桌游设计师的终极效率指南

卡牌批量生成工具CardEditor&#xff1a;桌游设计师的终极效率指南 【免费下载链接】CardEditor 一款专为桌游设计师开发的批处理数值填入卡牌生成器/A card batch generator specially developed for board game designers 项目地址: https://gitcode.com/gh_mirrors/ca/Car…

作者头像 李华
网站建设 2026/4/14 21:15:01

暗黑2存档修改器终极指南:3步完成角色定制

暗黑2存档修改器终极指南&#xff1a;3步完成角色定制 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款专为《暗黑破坏神2》玩家设计的强大存档编辑工具&#xff0c;支持原版D2和D2R重制版&#xff0c;能够轻松实…

作者头像 李华