从0开始学习 **Lyra Starter Game** 项目

我们即将学习LyraStarterGame项目,这是一个基于Unreal Engine 5的Lyra游戏框架的示例项目。为了从0开始学习,我们需要了解项目的核心架构和关键类。Lyra框架采用了模块化和可扩展的设计,因此我们首先需要理解几个核心模块和类。

LyraGameMode:游戏模式,定义了游戏的规则和流程。

LyraPlayerController:玩家控制器,处理玩家输入和控制角色。

LyraCharacter:游戏中的角色类,代表玩家控制的角色。

LyraPlayerState:玩家状态,存储玩家的状态信息,如分数、生命值等。

LyraGameState:游戏状态,存储整个游戏的状态,如游戏是否进行中、玩家列表等。

LyraHeroComponent:英雄组件,负责处理角色的能力、输入和相机等。

LyraAbilitySystemComponent:能力系统组件,用于处理Gameplay Ability System(GAS)相关的能力和效果。

LyraHealthComponent:健康组件,处理角色的生命值。

此外,还需要了解LyraStarterGame项目中的特定类,这些类可能继承自上述核心类。

学习步骤建议:

从游戏模式开始:了解游戏如何启动,游戏规则如何设置。

玩家控制器:了解输入如何处理,界面如何更新。

角色和英雄组件:了解角色的行为、能力如何被控制。

玩家状态和游戏状态:了解游戏中的数据如何存储和同步。

能力系统:了解Lyra如何使用GAS来实现技能和效果。

下面,我们将逐一介绍这些关键类和方法,以便你能够逐步深入理解整个项目。

注意:由于LyraStarterGame项目可能包含多个模块,我们主要关注与游戏逻辑密切相关的类。

从0开始学习 Lyra Starter Game 项目是一个很好的选择,它是理解现代Unreal Engine高级游戏架构的绝佳范例。这个项目包含了UE5的许多核心新特性和最佳实践,如Gameplay Ability System、Enhanced Input、Common UI等。

为了让你能系统地学习,我建议按照以下模块和类的顺序进行,从宏观到微观,从基础到复杂。

第一阶段:宏观架构与核心流程

首先,你需要理解Lyra的整个启动流程和核心框架。不要急于深入细节,先搞清楚"谁在什么时候被创建"。

1. 游戏入口:Project Settings

  • 路径:Edit -> Project Settings -> Maps & Modes
  • 学习内容:找到 Game Instance ClassDefault GameMode。这是整个游戏的起点。Lyra通常会设置一个自定义的GameInstance。

2. 游戏实例:ULyraGameInstance

  • 路径:/LyraGame/System/LyraGameInstance.h/.cpp
  • 学习内容:这是游戏的"单例",贯穿整个游戏生命周期。关注它的Init()Shutdown()方法。它负责管理在线会话、加载屏幕等全局系统。

3. 游戏模式:ALyraGameMode

  • 路径:/LyraGame/GameModes/LyraGameMode.h/.cpp
  • 学习内容:GameMode定义了游戏的规则。重点关注:
    • InitGameState(): 如何初始化游戏状态。
    • HandleStartingNewPlayer(): 当一个新玩家加入时(包括本地分屏和网络连接),游戏模式如何为其生成Pawn和PlayerController。
    • OnPostLogin(): 玩家登录完成后的处理。

4. 体验(Experience):ULyraExperienceDefinition

  • 路径:/LyraGame/GameModes/LyraExperienceDefinition.h
  • 学习内容:这是Lyra架构的核心创新之一。Experience 像一个数据资产,定义了在特定游戏情境下(如主菜单、特定地图、特定模式)应该使用哪些Pawn数据、能力集、动作输入、相机等。这实现了游戏逻辑与具体地图的强解耦。

第二阶段:玩家与控制的诞生

现在,我们来看一个玩家是如何从无到有被创建并控制的。

1. 玩家控制器:ALyraPlayerController

  • 路径:/LyraGame/Player/LyraPlayerController.h/.cpp
  • 学习内容:这是玩家在服务器端的代理。关注:
    • OnPossess() / OnUnPossess(): 当它控制或取消控制一个Pawn时会发生什么。
    • InitPlayerState(): 如何初始化玩家的状态。

2. 英雄角色(Pawn):ALyraHero

  • 路径:/LyraGame/Character/LyraHero.h/.cpp
  • 学习内容:这是玩家在游戏中实际控制的角色。它的核心功能并不在自身,而是由多个组件驱动。

3. 英雄组件:ULyraHeroComponent

  • 路径:/LyraGame/Components/LyraHeroComponent.h/.cpp
  • 学习内容:这是理解Lyra玩家控制的钥匙! 这个组件负责协调其他组件。在InitializePlayerInput()中,你会看到它如何从Experience中读取输入配置并设置。

4. 输入系统:ULyraInputConfigULyraInputComponent

  • 路径:
    • /LyraGame/Input/LyraInputConfig.h (数据资产,定义了"输入动作"与"Gameplay Tag"的映射)
    • /LyraGame/Input/LyraInputComponent.h/.cpp (组件,处理输入)
  • 学习内容:学习Lyra如何使用Enhanced Input System ,并将输入事件转化为Gameplay Tag ,再通过Tag去触发Gameplay Ability System (GAS) 中的技能。

第三阶段:能力的核心 - Gameplay Ability System (GAS)

GAS是Lyra战斗、技能系统的基石,也是学习曲线最陡峭的部分。

1. 能力系统组件:ULyraAbilitySystemComponent

  • 路径:/LyraGame/AbilitySystem/LyraAbilitySystemComponent.h/.cpp
  • 学习内容:这是GAS的核心组件,管理所有能力的授予、激活、冷却等。关注TryActivateAbility()等方法。

2. 技能(Ability):ULyraGameplayAbility

  • 路径:/LyraGame/AbilitySystem/LyraGameplayAbility.h/.cpp
  • 学习内容:所有具体技能(如跳跃、射击、使用道具)的基类。重点关注其生命周期:
    • CanActivateAbility(): 技能能否被激活?
    • ActivateAbility(): 技能激活时的主要逻辑
    • EndAbility(): 技能结束时清理。

3. 属性集(AttributeSet):ULyraHealthSet, ULyraCombatSet

  • 路径:/LyraGame/AbilitySystem/Attributes/
  • 学习内容:这些类定义了游戏中的数值属性,如生命值(Health)、护甲(Armor)、子弹数(Ammo)等。它们是同步的,服务器有权威。

4. 游戏效果(GameplayEffect):GE和GEC

  • 路径:查看内容浏览器中的/Game/GE_/Game/GC_开头的资产。
  • 学习内容:
    • GameplayEffect (GE) : 用于即时修改持续影响属性(如造成伤害、添加Buff)。
    • GameplayCue (GC) : 用于处理非游戏逻辑的视觉、音效表现(如击中火花、治疗光环)。

第四阶段:UI与前端

1. 用户界面:ULyraHUDULyraUIController

  • 路径: /LyraGame/UI/LyraHUD.h/.cpp, /LyraGame/System/LyraUIController.h/.cpp
  • 学习内容:HUD负责管理屏幕上的Widget。LyraUIController是一个更高级的UI管理器,负责处理UI流(如从游戏切换到暂停菜单)。

2. 通用UI:UCommonActivatableWidget

  • 路径:/LyraGame/UI/Foundation/
  • 学习内容:Lyra使用Common UI插件来构建其UI。学习这些可激活的Widget如何与输入栈交互(例如,打开一个菜单时,自动处理背景游戏的输入屏蔽)。

学习路径总结与建议

  1. 按顺序阅读:严格按照上述阶段顺序进行。不要跳过第一阶段直接去看GAS,否则你会迷失在细节中。
  2. 调试与日志 :在关键函数(如ALyraGameMode::HandleStartingNewPlayer, ULyraHeroComponent::InitializePlayerInput, ULyraGameplayAbility::ActivateAbility)中添加UE_LOG,在运行时观察它们的调用栈和顺序。
  3. 使用编辑器和调试器
    • 在编辑器中运行游戏,使用 "Console" 输入 ShowDebug AbilitySystem 来可视化角色的GAS状态。
    • 熟练使用 Unreal Insights 进行性能和分析追踪。Lyra项目有很好的内置追踪点。
  4. 动手修改 :不要只读代码。尝试做一些小修改:
    • 修改LyraHero的移动速度。
    • 创建一个新的输入动作和对应的GameplayTag,并绑定到一个简单的Ability上(比如让角色播放一个动画)。
    • 修改ULyraHealthSet,给角色添加一个"魔力值(Mana)"属性。
  5. 查阅官方文档 :Epic官方关于 Lyra Sample 的文档是极佳的补充资料。

学习Lyra是一个循序渐进的过程。它展示了UE5制作高质量、可扩展多人游戏的最佳实践。祝你学习顺利!如果在某个具体环节遇到困难,可以随时再提问。

相关推荐
q***T58332 分钟前
C++在游戏中的Unreal Engine
c++·游戏·虚幻
保持低旋律节奏33 分钟前
C++——C++11特性
开发语言·c++·windows
rchmin2 小时前
Prompt Engineering 从入门到精通的系统学习路径
人工智能·学习·prompt
小张成长计划..2 小时前
【C++】16:模板进阶
c++·算法
CoderIsArt2 小时前
SAM-5 核心类体系的 C++ 完整设计
c++·sam5
CS_浮鱼2 小时前
【Linux进阶】mmap实战:文件映射、进程通信与LRU缓存
linux·运维·c++·缓存
江苏世纪龙科技3 小时前
开启汽车实训新视界:大众迈腾整车检测与诊断MR仿真实训系统
学习
YJlio3 小时前
「C++ 40 周年」:从“野蛮生长的指针地狱”到 AI 时代的系统底座
c++·人工智能·oracle
2301_800256113 小时前
第七章 空间存储与索引 知识点梳理3(空间填充曲线)
数据库·笔记·sql·postgresql