news 2026/8/7 16:35:15

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/8/7 15:19:02

31、集群架构全解析:类型、配置与最佳实践

集群架构全解析:类型、配置与最佳实践 1. 集群软件概述 集群软件能够创建单一系统映像,并将任务分配到所有节点上并发执行。任务通过消息传递库进行协调,结果也通过该库进行通信。常见的集群软件应用示例包括 Oracle Real Application Clusters (RAC) 和 IBM Sysplex Data…

作者头像 李华
网站建设 2026/8/7 22:31:49

AI Agent领域的痛点与创新解决方案

AI Agent领域的痛点与创新解决方案 目录 AI Agent领域的痛点与创新解决方案 一、核心痛点问题 1. 推理能力局限:"想不深、连不上" 2. 成本与效率悖论:"算不起、等不及" 3. 上下文管理困境:"记不住、理不清" 4. 可靠性危机:"说胡话、做傻…

作者头像 李华
网站建设 2026/8/7 21:18:51

44、网络安全之防火墙与病毒防护全解析

网络安全之防火墙与病毒防护全解析 1. 防火墙的控制方法 防火墙在企业网络中起着至关重要的作用,它能够对员工使用内部服务器以及外部人员访问公司服务器的方式进行严格控制。防火墙主要通过以下三种方法来控制网络流量: - 数据包过滤 :对每个进出的数据包进行检查,依…

作者头像 李华
网站建设 2026/8/7 2:28:46

50、未来信息技术趋势:关键技术解析与应用前景

未来信息技术趋势:关键技术解析与应用前景 1. 网络融合技术 网络融合技术将存储和语音等服务集成到 IP 网络中,有助于降低设置和支持成本。通过这种集成,组织能够利用现有的网络进行应用程序、存储和电话通话等操作。同时,不同的服务团队可以合并,从而减少人员和维护成本…

作者头像 李华
网站建设 2026/8/7 14:07:17

快速掌握yt-dlp-gui:Windows视频下载终极指南

快速掌握yt-dlp-gui&#xff1a;Windows视频下载终极指南 【免费下载链接】yt-dlp-gui Windows GUI for yt-dlp 项目地址: https://gitcode.com/gh_mirrors/yt/yt-dlp-gui 在数字内容爆炸的时代&#xff0c;高效获取网络视频资源已成为许多用户的迫切需求。yt-dlp-gui作…

作者头像 李华
网站建设 2026/8/5 8:28:26

Zotero-GPT插件API密钥配置终极指南:3步解决密钥错误问题

Zotero-GPT插件API密钥配置终极指南&#xff1a;3步解决密钥错误问题 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 当你兴奋地想要使用Zotero-GPT插件来智能处理文献时&#xff0c;却遭遇了"your secret…

作者头像 李华