游戏内红点系统设计

游戏内红点系统设计

红点系统设计的初衷就是为了提示用户。通过红点系统所构建的一个个红点路径,将玩家重最外层引导到最里层。

常见的应用场景有:提示玩家有新邮件,完成新的成就,达成某项任务,可以进行升级等等。 通常红点系统所构建的路径都是连续的。

红点的种类

常见的红点
红点大致上可以分为表现及逻辑。

从表现上来说

红点可以是一个简单的红点,或者是长得并不像红点的感叹号、文本、动画特效等等。 总之是给用户一个提醒的内容。

策划可能会基于提示的优先级(毕竟全强调就是没强调),趣味性及功能性安排这种“红点”的表现。

表现上的处理可以自行封装表现,或者直接在对应界面上添加自定义的红点表现,然后等宏定数据变化后通过回调或者事件的方式再变更界面表现。

从逻辑上说

红点最基础的两个状态为显示及隐藏。
另外还有其他信息的展示例如红点的数量等。

代码实现

分析过后其实发现红点结构就是一个树形结构,还是个前缀树。 代码可以参考下面的链接。

树的应用(一)- 基于TrieTree(前缀树)的红点系统
【游戏开发实战】手把手教你在Unity中使用lua实现红点系统

另外由于前缀树的操作会对字符串做分割的操作,这样会导致性能问题。 为了解决字符串切割的问题可以对字符串的使用做优化。 下面这篇文章使用 RangeString(对string的封装,更方便的作为前缀树字段中的键来使用)。

基于前缀树的红点系统

另外由于前缀树种的叶节点进行数据变更时需要更新父节点的数值。 由于大量的子节点刷新会导致父节点的无效刷新,所以有以下两个策略。

  1. 添加一个存储脏节点池子。 当子节点数据变更后将其父节点放入脏池子。 然后由外部的Update进行触发更新,遍历脏节点池子让其查询自己的值。
  2. 在每个节点上添加脏标记。 当子节点数据变更后顺着父节点的路径一路标记所有的节点为脏。 等触发更新操作后再由根节点从上至下进行查询被标记为脏的节点并进行更新。

第一种策略可能需要几帧的时间进行更新操作,性能上没有什么消耗而且分在不同的帧内处理更加平滑。但是稍微不是那么的及时,但是对通常游戏也没有多少影响。
第二种策略既可以由Upate触发更新,也可以手动触发。如果需要计算比较及时的可以用。

猜你喜欢

转载自blog.csdn.net/qq_36433883/article/details/126503511
今日推荐