回合制相关说明
回合制demo链接:
https://gitee.com/sce-open-source/turn-based-demo
综述
以下事件与函数为编辑器提供的回合制核心函数
在回合制模式下,单位部分特性会改变
生命、魔法恢复变为:每回合恢复对应数值的生命、魔法
技能冷却模式改变为:不会随时间自然转动冷却,每回合-1秒(3秒冷却时间=>3回合冷却时间)
BUFF的持续时间变为:与技能相同(3秒持续时间=>3回合持续时间)
移动速度变为:根据移动速度决定行动顺序
现在以上述功能为基础,制作一个简单的回合制DEMO
1.大地图、大地图单位
玩家操作分为大地图与战斗场景2大块
在大地图时玩家正常行动,大地图英雄有攻击能力,没有技能,攻击击中敌人(或被敌人击中)进入回合制战斗
demo采用明雷遇敌,创建对应的敌人单位
简单制作一个大地图,中间放上玩家在大地图上的主控单位
放置敌人,水人与凤凰为无AI,玩家攻击后进入战斗
蜘蛛带有AI,会主动攻击玩家,玩家攻击或被攻击进入战斗
在数编。常用配置、单位属性中增加大地图单位的属性。给大地图单位增加【大地图单位】属性作为标签
2.战斗单位
由于回合制单位的行动与状态都有所不同,将回合制的单位与战斗单位做区分
战斗单位以回合制模式来配置数值
战斗单位增加状态,忽略技能指令,这样单位就不会接受摇杆的移动命令到处走了
3.玩家队伍
在触发器中创建【玩家队伍】类
增加变量:
大地图单位
玩家
战斗单位(单位数组)
方法:
添加战斗单位
在游戏开始时,初始化玩家队伍,为队伍指定玩家操作的大地图单位
为战斗队伍添加初始的战斗单位
在常用配置中增加【回合制战斗单位】属性,作为标签
在添加战斗单位时
战斗单位默认隐藏,【回合制战斗单位】属性为1
4.战斗对象
此时进入游戏,可以操作大地图单位在大地图上移动,接下来需要处理进入回合制战斗的逻辑
创建类【回合制战斗】
新建触发,事件为【单位造成伤害】
当两个拥有大地图标签的单位造成伤害时,认为两个队伍进入战斗
创建一个回合制战斗对象,接下来处理战斗逻辑
4.a.战斗场地
创建一个简单场景
放置4个点与镜头
4.b.敌人战斗单位创建
为战斗增加【创建敌人单位】的方法
根据大地图遇到的敌人单位,为战斗添加敌人
打上【回合制战斗单位】的标签
(在数编中处理敌人配置可参考12)
4.c.战斗准备
(触发位置:
)
·发送回合制战斗开始事件,其他模块会需要这个事件
·把玩家的战斗单位加入此次战斗
·根据玩家数量、敌人数量、初始化单位站立位置
·黑屏转场,战斗单位从创建位置移动到战斗位置,玩家镜头切换,最后启动回合制战斗
此时,进入战斗后玩家与敌人会以设置的阵型排布
接下来制作其他模块
5.回合制战斗
(触发位置:
)
调用api,将所有此次回合制战斗的单位(玩家战斗单位、敌人战斗单位)传入
开启回合制模式
这个api会将传入的单位的逻辑变为回合制(参考【总述】)
系统自带的回合制行动单位,会以【回合制模式-单位行动】事件发出
使用触发器接收事件,并进入指定单位的行动
为行动单位创建表现,根据是玩家单位还是敌人,走入不同逻辑
玩家操作则切换为主控单位,等待玩家发布命令
敌对单位则走入ai流程
当玩家或敌人释放技能结束,则认为一回合行动完毕
执行单位归位(等操作)
向前推进一个回合(大招逻辑后续讲解)
推进后,系统会根据单位的移动速度,再次发送事件
此时一个基础的回合制战斗流程就可以运行了
6.战斗结束
当单位死亡时
如果单位有【回合制战斗单位】标签
则将单位从战斗中剔除
同时检测战斗是否结束,更新单位站立位置
如果有一方的所有单位死亡,则进入战斗结束
以敌方全部死亡为例
触发位置(
)
进入黑屏转场
杀死在大地图遇到的明雷单位
重新隐藏战斗单位,
设置玩家状态至大地图
7.UI-行动队列
根据单位行动顺序,显示一个UI列表
通过【回合制模式-队列更新】事件获取默认的单位队列
新建【队列更新】事件
勾选【自动转发客户端】(勾选后,在客户端可以接收到服务器发送的事件)
参数为【数组:数值】
将单位转化为数值
发送事件
客户端准备
在客户端接收到队列后,先销毁上一次的队列ui
根据接收到的单位信息,依次创建ui,显示信息
这样,就创建了一个能够显示单位行动顺序的UI
8.大招
制作单位的大招,有以下特新
单位每次行动为大招充能,充能满后,可以在其他单位行动时插入,下一回合进入特殊的大招回合,大招回合无法发动其他技能
新建【大招】类
新建事件
在玩家添加战斗单位时发出事件
如果单位没有初始化过大招,则遍历单位的所有技能,如果类别为大招,则创建大招对象(目前设定一个单位只会有一个大招)
每回合增加能量,在单位行动完成事件中,如果单位有大招,则为大招增加能量
如果能量达到上限,则进入可以释放的阶段
玩家释放大招后,大招清空能量,重新进入不可释放状态
9.大招UI
在UI编辑器中创建大招面板
根据显示的信息制作UI
demo选择显示的信息为
大招按钮
技能图标
英雄名
技能名
充能状态
在回合制开始时
遍历玩家战斗单位,将大招的单位、技能ID、能量、能量上限发送至客户端
客户端根据接收到的信息,刷新并显示UI
根据大招的能量与能量上限,显示
0~3能量
点击按钮时,发送事件(自动转发到服务端)
10.插入大招回合
服务端接收申请后,判断是否可以释放,如果通过
则在当前回合结束后插入一个大招回合,如果当前已有插入的大招,则按顺序在后端加入
使用变量【v_插入大招array】记录插入的大招队列
在单位行动完成时判断
如果有等待中的大招插入,则进入插入大招的回合
插入回合中,禁用所有其他技能,同时将行动单位切换为大招单位
在己方施法中增加逻辑
如果是大招回合,则退出回合
在大招回合中,恢复先前被禁用的技能
同时判断,如果还有后续等待的大招,则进 入下一个大招回合
否则游戏继续推进
至此,完成了大招的流程
11.大招队列
插入大招时单位会有一个特殊回合,需要显示在行动队列上
在事件中增加参数,行动类型,1为普通回合,2为大招回合
此时分为两个情况
在当前已经是大招回合的情况下,先传入大招回合
否则将大招插入在第一个行动单位后
客户端接收后,根据行动信息,将大招向右移动50,在文字后加入[大招]做区别
进入游戏测试
初始为远程英雄排在第一位
此时插入2个大招
进入大招回合
12.回合制指示器
在技能数编中,点击显示高级属性
可以将指示器改为【选择指示器】
这是为回合制特别定制的指示器,有以下特点
当技能为【单位目标】时
·点击后,无需拖拽,选目标后需要再次点击。
·选中一个目标后会有目标选择光圈并高亮描边。(不符合目标过滤的单位点了也没用)
·再次点击被光圈选中的主目标单位,则视为确认并施法。
·当有任何单位被光圈选中,再次点击原技能也视为确认并施法。
·目标选择阶段点其他技能会直接取消目标选择。
·目标选择阶段点取消区域或者空地会取消目标选择。
·若技能启用了智能施法,则在点击了一次技能后直接在符合智能施法过滤和范围的目标身上显示目标选择光圈(客户端验证,不考虑验证器),若用户对此目标满意,直接再次点击该目标即可确认施法。(其它目标要点2次)。
·若技能配置了施法光标范围,则在主目标周围范围内符合智能施法过滤器的目标也会显示次要的目标选择光圈。
·指示器节点上可配置主次目标的选中光圈表现。
当技能为【无目标】时
·仅对无目标技能生效。
·点击后,对周围技能配置的施法光标范围内的单位显示目标光圈并高亮描边。无需手动选择目标。目标也需要符合智能施法过滤(我已经把无目标技能改为会显示智能施法过滤字段)。
·再次点击任何一个身上带光圈的单位则视为确认并施法。
·再次点击原技能也视为确认施法。
·目标选择阶段点其他技能会直接取消目标选择。
·目标选择阶段点取消区域或者施法光标范围外的空地会取消目标选择。
·指示器节点上可配置选择光圈表现
例:
进入战斗后,点击【火球】,点击敌人,被选中的敌人会以高亮显示
此时再次点击敌人、或点击技能,会对高亮目标释放技能
12.新建数编
接下来以【敌人配置】为例,将敌人战斗小组优化为数编配置
在触发编辑器下方,勾选
新建数编节点分类
新建数编节点类型数据
增加成员
此时进入数编
开启回合制显示
此时就可以创建敌人配置的数编了
为3个明雷配置4个队伍
其中蜘蛛有两种随机配置
接下来修改进入战斗部分
新增两个变量,数编敌人配置,单位ID数组
增加函数,获取敌人队伍,传入大世界敌人,返回敌人配置
根据进入战斗的大地图单位设置敌人配置,可以根据区域、等级不同,同一个大地图单位对应多个随机配置
根据配置表,将对应的单位加入战斗
获取敌人配置后判空,将获取到的配置加入战斗
这样,就将敌人小队的配置转移至数编中了
13.其他
a· 使得单位跳过队列条等待立刻行动(一般用于辅助上BUFF)
b· 回合制战斗单位没有碰撞需求,可以将碰撞调至0,使得行动看起来更加流畅
c· 近战技能需求效果:在选定目标后,先走到目标前方,再进行释放技能
给近战技能打上标签
通过【技能施法前摇开始】获取到需要近战释放的技能
打断技能,让单位移动到目标前方,再次发动技能