D04-高级排行榜
简介
在游戏中,玩家通常需要一定的指引来进行游戏行为,所以对于开发者而言就需要在游戏的各个阶段里给予玩家不同的目标作为指引。
【排行榜】是游戏设计中:可以集中展示游戏结果,给予玩家目标,促进玩家间互动的常用功能,一个恰到好处的排行,往往会对游戏的时长和留存产生正面影响
星火编辑器内预制了【高级排行榜】的功能,只需要简单地配置,即可让玩家感受到“冲榜”的乐趣
使用方法
其思路可以总结为:
预制功能库应用排行榜->数编内配置关键参数及显示内容->触编内完成排行榜的逻辑->利用数编的比较函数制定排序规则->在界面编辑器中将其显示出来
别急!别慌!别害怕!
咱们一步步来!
1. 预制功能库应用排行榜
将『新-排行榜』拖入『游戏机制』下,点击『点击应用所有预制功能』
2. 数编内配置关键参数及显示内容
点击『工具按钮』展开下拉列表,点击勾选『排行榜』和『任意数据』
这样我们就能在列表里看到『排行榜』和『任意数据』并可以对他们进行配置了!
『排行榜』的配置
①在『排行榜』下新建蓝图,并继承[通用库模板]排行榜
这里星火预制了排行榜模板,可以直接复制粘贴为一个新的蓝图卡片然后简单配置其中的参数即可 具体的使用方法见4.
②来认识卡片上的字段吧
字段 | 解释 |
---|---|
排行榜上线人数 | 排行榜可以容纳的人数 会留10%的余量进行并发处理,保证同时有若干个人上榜时不会出现异常情况 |
(服务端)比较函数 | 排行榜内数据的排序规则 类似lua中的table.sort(),传入两个数据体作为参数进行比较,并返回true/false决定顺序,返回true为a->b降序排列 具体的使用方法见4. |
客户端比较函数 | 排行榜内数据的排序规则 大部分情况下和服务端完全相同,复制粘贴即可。比较函数分为客户端比较函数和服务端比较函数,因为服务端不会对所有数据进行完全排序,只会排出n*110%中的前n名,并且在每次排名数据插入时判断排名数据是否可以上榜,准确的排序会在前n名数据发给客户端后在客户端进行 |
排行榜唯一key列表 | 此ID列内如果有重复项,则保留排名靠前的数据 举个简单例子:我们不希望某一个玩家完全霸榜,榜上重复出现他的名字,那么就需要把『用户ID』作为排行榜唯一key,让这个玩家最强的数据在榜上即可。只能进行最基本的判断,因此判断重复key字段只能是字符串或者数值类型,不要用复杂类型 |
排名数据key列表 | 排名列显示内容的key,需要和触编内对应 |
排名数据显示名列表 | 排名列显示的内容,需要从key列表内挑选所需的展示在界面上 |
③根据自己游戏的需求配置这些字段
『任意数据』的配置
点击[通用库模板]排行榜列表,在卡片上点击加号连接公共节点
3. 触编内完成排行榜的逻辑
①新建一个触发器
②按照游戏的设计需求配置触发事件,例如:游戏结束时,完成任务时,玩家进入排行榜区域时等
③新增一个【类型为简单表、key类型为字符串、值类型为任意】的局部变量
④动作:设置简单表内key的值
⑤动作:为『数编内添加的排行榜』新增『排行榜数据』
4. 利用数编的比较函数制定排序规则
①首先可以考虑使用排行榜样例进行修改 (建议右键复制一份再修改,不要在原蓝图卡片上修改)
②点击打开『编辑函数』,按照需求填写key(需要和蓝图卡片上的排名数据key对应)
③可以按照规则修改条件分支的内容
④如果模板不够用,也可以参考链接来自定义你的规则排序函数文档
注意: 排行榜比较函数的返回值为布尔值,和触发器中数组排序中比较函数的返回值(数值)不同。
5. 在界面编辑器中将其显示出来
①在MainPage内添加排行按钮
②点击新增的按钮,在属性面板里选择事件并创建
③执行打开排行榜界面的动作,保存!
示例
我们假设一个场景: 游戏开始3s后(触发事件)排行榜载入完成并可以点击查看,排行榜内展示了对局中所有玩家(key1)在游戏内的:击杀数(key2)、死亡数(key3),并且按照击杀数降序排列,如果击杀数相同时,则按死亡数升序排列(比较函数)
①在数据编辑器里新增排行榜蓝图并配置字段
②在任意数据的排行榜列表中连接公共节点
③1游戏开始3秒作为触发事件,执行后续动作
④2遍历对局内所有的玩家,拿到他们昵称及自定义属性
⑤3新增一个【类型为简单表、key类型为字符串、值类型为任意】的局部变量
⑥4分别为『排行数据key列表』内的数据设置值
⑦5动作:为『数编内添加的排行榜』新增『排行榜数据』
⑧通过数编内的排行蓝图卡片打开比较函数
⑨进行函数的编辑:在kill的值不相同的情况下,按照kill的值降序排列;kill的值相同时,则按照die的值降序排列
⑩在界面编辑器中添加按钮并创建点击事件
上面讲了高级排行榜的普遍用法,其实到这里大家已经能做一个很完整的排行榜给玩家体验了,但是如果你是资深开发者!需要更自由的用法!
那么请看!