《Multiplayer RPG Template》说明文档
这是一份Multiplayer RPG Template的说明文档,内容包含其中主要系统的配置和制作方法
此案例是基于UE4的ListerServer建立的局域网联机游戏demo,参考作品WOW
基于UE4版本4.25
demo尚且有未完善的地方,后续会跟进优化和修复
技能系统
如上图所示,此图为技能表的配置信息,下面简述其中重要的参数
- Action: 这个变量代表这个行为的唯一ID,原则上跟表格的RowName相同,很多逻辑中需要通过这个ID查找关于这个技能的所有信息,或者通过这个ID执行这个技能等
- Display(struct):3个参数用来显示这个技能一般信息,比如名字或者说明还有图标的显示,在UMG上有相关的体现,当然你也可以用来自定义
- CastData(struct):这个是一个施法的结构体,主要设置的是施法的方式和条件
- Type:比如默认的读条施法,持续施法,攻击叠加类的施法等方式
- Time:施法所需要的时长,0意味着瞬发
- Duration:如果是持续施法,那么这个参数意味着引导时间
- KeepAttackStat:施法完以后会继续进行普通攻击
- MotionCast:移动施法,设置为否的话必须站立施法,一旦移动就打断施法
- NotTargetCast:不需要目标的施法,一般用于范围技能比如火雨之类
- Mp:消耗魔法值,战士为怒气值
- CD:冷却时间
- MaxRange:最大释放范围,按照虚幻单位计算,0意味着无限制
- LearnGold/Level:学习该技能的前置条件,0意味着无要求
- RangeSelectRange:如果是范围选择的技能,此参数表示作用的半径
- TargetType:目标类型,作用地方还是友方等
- SkillClass:技能实例的类,无需手动创建
SkillRef
这个是通过表格配置的SkillClass创建的,无需手动创建,你只需要制作这个类的逻辑和效果
这个类是继承自
BP_BaseSkill
,里面有一些乱七八糟的蓝图逻辑,不过并不是全部都是必须使用的,这个类很多情况下你可以自由发挥,反正技能释放了以后就通过这个类来控制这个技能实例的运行下面就通过
IceBullet
这个技能类来说明一下
IceBullet
继承于ProjectileBase
,如上图所示,这是这个类的基本参数类型
- speed:飞行速度,依赖
ProjectileComponent
- StopDistance:停止的距离,因为这个类是追踪目标飞行的,所以会总有接近并且到达目标的时候,到达目标并停止以后会产生一段逻辑
- Duration:持续时间,如果没有命中到达时间以后也会摧毁自己
- Sound/FX:相关的特效配置,Start可以用于产生的时候播放,Hit可以用于打中目标以后播放,但都需要手动释放,
- 在
ProjectileBase
已经实现了BeginPlay
以后调用Start的效果 - 在打中目标后已经实现播放Hit的效果
- 在
- BuffData:如果这个技能有buff/debuff可以设置这个类,需要手动调用方法来创建并运行buff类,如下图
BuffRef
这是Buff的实例类,通过SkillRef内部调用
CreateBuff
方法创建通过重写
BuffInit
和BuffEnd
方法来实现自定义的逻辑,如果是拥有持续效果,那么你可以重写BuffDelta
方法来制作持续调用的逻辑
装备系统
如上图所示,这个是装备信息的配置表,下面简单介绍其中主要参数的作用
- BodyPart:装备对应的位置
- Mesh/Mat:用于显示这个装备实体的模型,装备在人物上或者丢弃到世界中的显示
- Property:如字面意思就是2种属性,其中Adv属性会随着Base的更改而变化
道具系统
道具系统类似于装备系统
- EffectType:作用类型,本案例只制作了治疗效果和增加魔法的效果
- Value: 可以设置作用效果的范围值,当然这个不是必须的,具体是下面的道具类内部实现
- CanBeStacked:如果是否那么一个道具占据背包栏的一格,否则么可以堆放到一起
- ActionClass:道具类实现逻辑的类,参考Skill的实例实现,具体逻辑可以写到这个类里面
掉落系统
如上图所示,掉落系统的配置放在
DataSystem
这个类里面,为什么没有配置表格呢?O(∩_∩)O当然也可以,你可以自己创建一个类似的表格然后替换其中的逻辑,这个很简单
这个配置信息是一个Map键值对,键对应的是角色的类,值即是掉落信息数组
- Action:选择装备/道具等的Action名称
- Type:选择是装备/道具,当然你要是想掉落技能的话理论上也可以,请自由发挥
- Amount:掉落数量
- Probability:概率,这个概率计算是在角色创建的时候就完成的,非击杀的时候
任务系统
如上图所示,这是任务表格的配置信息
- Titile:任务的标题,会显示在任务栏内的抬头标题部分
- Target:任务的目标
- DynamicTargetStat:这个会动态的刷新,具体实现的逻辑在下面的TaskClass内
- Descripion:任务描述
- Reward:奖励
TaskRef
如上图所示,每接受一个任务以后就会产生一个任务类来作为该任务的观察者(代理)
具体这个任务是干什么的你可以通过实现这个类内的逻辑来管理,同时设置任务目标里的动态信息
其他
怪物刷新
怪物刷新是在场景里放置一个
BP_AIGenerator
管理类来完成的
- MaxNum:刷新的最大数量
- AIClass:设置刷新角色的类,超过1个的时候就随机从中刷新
- Range:以该管理类的位置为中心的半径内刷新怪物