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

UE5 Lyra项目源码分析-角色配置说明

在上一篇里,我们研究了关卡的配置如何在GameMode实现加载的,并稍微理解了Lyra是如何实现的模块化,由于模块化太彻底,所以理解起来有些难,在这一篇里,我们看一下配置里面比较想了解的一块。就是角色是如何配置,并且如何将GAS应用到身上的。

查看地图总配置

我们可以想到,在UI上可以看到,有地图配置和名称描述等内容,当然需要配置文件去配置
在这里插入图片描述
根据在ActionRPG里面学到的经验,我找到对应的用户控件
在这里插入图片描述
在里面发现了对应的用户资产类型,它将所有的对应类型的用户资产加载
在这里插入图片描述
然后查看类型里面的数据能不能默认显示,要不要放到前面优先显示,最后生成用户控件放置到HUD上。
在这里插入图片描述
基于类型,我们搜索所有的资源,可以发现一下资源都是通过此类创建的。
在这里插入图片描述
找到了以后,我们就迫不及待的打开查看一下配置项有哪些内容,发现第一项是关卡,第二项是关卡的玩法配置,后面就是在UI上的一些相关配置。
在这里插入图片描述
然后查看源码,发现MapID和ExperienceID都是通过资源ID进行设置,并且设定了类型,所以,在下拉里,我们只能选中对应的类型的语言。
在这里插入图片描述
还有值得一说的就是ExtraArgs,这个可以通过URL传递额外的配置,我们在上一篇Lyra解析里提到过这里。
在这里插入图片描述
然后就是加载地图时显示的背景图片,这里使用了TSoftClassPtr,也就是配置项里不会存储用户控件蓝图,而是存储的蓝图地址,在需要的时候进行加载。
在这里插入图片描述
后面,我们就要查看游戏玩法配置,接上了上一篇的配置加载解析。
在这里插入图片描述

玩家配置项

接着,我们查看一下玩家配置项,配置项里需要设置玩家使用的蓝图,初始的技能,标签之间的关系,然后就是输入操作触发的技能标签,最后是使用的相机模式。
在这里插入图片描述
技能集是个数组,可以配置多项,里面可以配置应用的技能和触发的标签,技能等级,还有GE和属性集AS
在这里插入图片描述
TagRelationshipMapping 则配置了技能标签之间的关系,这个本来应该是配置到技能里的,看来是为了模块化,也直接分开了
在这里插入图片描述
输入配置 Input Config,里面对应了输入操作Action对应触发的标签,分为默认操作和技能输入标签,实现逻辑应该不同。
在这里插入图片描述
最后是设置控制镜头的使用的类,看了一下应该是Lyra单独实现类,感兴趣的可以看一下源码
在这里插入图片描述

角色的查看完成,接着就是玩法的相关配置了,因为角色的那些配置还不足以支撑起当前游戏玩法,所以,还需要额外的一些操作配置来实现。
后面的玩法的操作配置,上一篇里我们也查看了对应的配置是如何实现,

处理配置

如何能够得之Lyra是如何处理角色数据的,我们可以从GameMode 的ChoosePlayerStart函数入手,这个函数是从场景里获取到玩家出生点,如果你设置了多个,还可以根据逻辑随机一个出生点生成
GameMode里获取出生点也是通过组件去获取的,这里我不再去看细节,感兴趣的可以去看看如何拿到的出生点。
在这里插入图片描述
接着,查看初始化GameState函数,在初始化完成GameState后,绑定监听配置加载完成的函数
在这里插入图片描述
获取到关卡里的所有的玩家控制器,如果从对应的玩家控制器获取不到Pawn,将创建。
在这里插入图片描述
基类里的RestartPlayer函数进行逻辑判断,获取到出生点,然后调用RestartPlayerAtPlayerStart函数
在这里插入图片描述
RestartPlayerAtPlayerStart函数里,先对所需的数据判断,获取到初始点的朝向
在这里插入图片描述
然后判断有没有Pawn,没有通过函数SpawnDefaultPawnFor创建一个
在这里插入图片描述

创建成功调用FinishRestartPlayer成功函数,要不然这调用失败
在这里插入图片描述
SpawnDefaultPawnFor其实就是获取出生点变换,方便后续设置角色位置,然后调用SpawnDefaultPawnAtTransform函数生成pawn
在这里插入图片描述
当然SpawnDefaultPawnAtTransform函数被Lyra覆写了,它是通过ULyraPawnExtensionComponent插件获取到PawnData,就是我们配置项里配置的角色配置去生成玩家控制的角色的
在这里插入图片描述
最后就是调用重置玩家控制角色位置,完成角色的Pawn的创建。
在这里插入图片描述


http://www.kler.cn/a/443704.html

相关文章:

  • 【文档搜索引擎】搜索模块的完整实现
  • webrtc获取IceCandidate流程
  • AIDD - 探索语言模型在药物分子生成方面的应用
  • 人工智能的未来:机遇、威胁与人类主导地位的挑战
  • 记录一个SVR学习
  • sqlite3,一个轻量级的 C++ 数据库库!
  • WebRTC服务质量(04)- 重传机制(01) RTX NACK概述
  • 简易记事本开发-(SSM+Vue)
  • Navicat 17 功能简介 | SQL 美化
  • 力扣题目解析--K个一组翻转链表
  • 042_Unscented Kalman Filter in Matlab无迹卡尔曼滤波
  • 对象的克隆 单例模式
  • sql递归查出某个值下的所有子集数据
  • 在微服务架构中,处理消息的中间件是实现服务间异步通信的关键组件。以下是几种常见的消息中间件及其特点、优点和缺点
  • 重庆大学《2024年844自动控制原理真题》 (完整版)
  • Arrays.sort和Collections.sort排序基本用法
  • Elasticsearch 实战应用:提升数据洞察与交互体验
  • 在 Solana 上实现 SOL 转账及构建支付分配器
  • 如何在 Spring Boot 中使用 Mapstruct
  • 计算机网络-L2TP VPN基础概念与原理
  • kafka理解记录
  • 清理悬空镜像以减少 Docker 空间占用
  • 二分查找题目:制作 m 束花所需的最少天数
  • Qt WORD/PDF(三)使用 QAxObject 对 Word 替换(QML)
  • Nginx常用配置详解(1)
  • upload-labs靶场1-19关