news 2026/5/16 6:01:43

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/5/11 13:12:41

Formily与第三方UI库深度整合:解锁企业级表单开发新范式

Formily与第三方UI库深度整合&#xff1a;解锁企业级表单开发新范式 【免费下载链接】formily &#x1f4f1;&#x1f680; &#x1f9e9; Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue …

作者头像 李华
网站建设 2026/5/11 12:34:34

告别重复劳动:3步掌握卡牌批量生成神器

告别重复劳动&#xff1a;3步掌握卡牌批量生成神器 【免费下载链接】CardEditor 一款专为桌游设计师开发的批处理数值填入卡牌生成器/A card batch generator specially developed for board game designers 项目地址: https://gitcode.com/gh_mirrors/ca/CardEditor 还…

作者头像 李华
网站建设 2026/5/11 16:43:40

如何快速获取阿里云盘Refresh Token:扫码神器完整指南

如何快速获取阿里云盘Refresh Token&#xff1a;扫码神器完整指南 【免费下载链接】aliyundriver-refresh-token QR Code扫码获取阿里云盘refresh token For Web 项目地址: https://gitcode.com/gh_mirrors/al/aliyundriver-refresh-token 想轻松获取阿里云盘的Refresh …

作者头像 李华
网站建设 2026/5/10 4:20:17

SuperCom串口调试工具终极指南:从新手到专家的快速上手攻略

SuperCom串口调试工具终极指南&#xff1a;从新手到专家的快速上手攻略 【免费下载链接】SuperCom SuperCom 是一款串口调试工具 项目地址: https://gitcode.com/gh_mirrors/su/SuperCom SuperCom串口调试工具作为嵌入式开发和硬件调试领域的得力助手&#xff0c;凭借其…

作者头像 李华
网站建设 2026/5/5 23:50:58

虚拟机安装 MySQL/MariaDB的部分方法

本文针对 VMware 中常用的两款 Linux 发行版 ——Rocky Linux&#xff08;RHEL 系&#xff09; 和 Ubuntu&#xff08;Debian 系&#xff09;&#xff0c;讲述部分安装 MySQL/MariaDB 的方法一、Rocky Linux&#xff08;8/9&#xff09;安装 MySQL/MariaDB1.使用官方源步骤 1&a…

作者头像 李华
网站建设 2026/5/15 6:35:15

HEIF Utility:Windows平台HEIF图像处理全攻略

还在为iPhone拍摄的HEIF照片在Windows上打不开而烦恼吗&#xff1f;这款开源工具将彻底解决你的困扰&#xff01;HEIF Utility是专门针对Windows系统打造的HEIF图像处理神器&#xff0c;让你轻松查看和转换苹果HEIF格式图片。 【免费下载链接】HEIF-Utility HEIF Utility - Vie…

作者头像 李华