游戏中红点提醒模块设计

Update 2023.2.3

实现红点系统需要注意的点

根据笔者的经验,项目中遇到的红点需求往往有以下几个注意点,需要我们在设计与实现红点系统时,稍加考虑。

  1. 虽然红点依赖于UI进行显示,但是红点系统的实现不能强依赖于UI。

(如某个UI界面并没有被打开并初始化,但是玩家的数据层已经发生改变需要进行提示,此时根据路径层层向上激活,也是需要在主界面的该功能入口处,进行红点显示。)

  1. 红点系统中的红点项需要能够动态增删。

(如新手玩家一开始并没有解锁某个模块的全部功能,此时也不需要对该项功能进行红点管理,通过解锁时动态添加,可以让项目更合理且高效。)

  1. 当大量子红点发生改变时,不宜无脑逐项通知其父节点,尤其是当这些红点的父节点是同一个时,会造成无用的刷新。

(假如仓库的红点需求为,每增加一项物品,就亮起主界面的仓库红点;此时玩家打开一个巨大礼包,一下子获得了100多件物品,同帧内,每个物品都无脑通知其相同的父节点进行刷新,不是一个好做法)



作者:Laughing辣粉酱
链接:https://zhuanlan.zhihu.com/p/453516850
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

首先放上前缀树的维基百科解释:

Trie解释:

在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。

一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。

在图示中,键标注在节点中,值标注在节点之下。每一个完整的英文单词对应一个特定的整数。Trie 可以看作是一个确定有限状态自动机,尽管边上的符号一般是隐含在分支的顺序中的。

键不需要被显式地保存在节点中。图示中标注出完整的单词,只是为了演示 Trie 的原理。

Trie 中的键通常是字符串,但也可以是其它的结构。trie 的算法可以很容易地修改为处理其它结构的有序序列,比如一串数字或者形状的排列。比如,bitwise trie 中的键是一串比特,可以用于表示整数或者内存地址。

trie 树常用于搜索提示。如当输入一个网址,可以自动搜索出可能的选择。当没有完全匹配的搜索结果,可以返回前缀最相似的可能。

 

---------------------------------------------------------------------------------------------------------------------------------

红点提醒的要求是达到条件需要在按钮上显示红点 提醒玩家操作
达到条件->显示红点 这是明显的观察者模式
“观察者”模式是我们在开发的时候经常需要用到的。使用Watch.js那么我们就可以实现在“每当对象属性改变的时候,执行你的函数”。
设计思路
按钮上绑定 注册监听 何时显示何时隐藏红点
操作后更新 操作响应/材料变化 变量更新

难点:
1.功能复杂的模块是层层嵌套的关系
比如:人物页签-装备子模块-神装子模块-1号装备位上可升级
这里当1号装备位可升级时 红点的出现和消失逻辑都需要一层层向上传递 
这种逻辑关系可以通过配置文件来生成代码 达到自动维护的目的

2.满足红点条件的一般有这么几类 消耗物品 角色等级 金币或钻石数目 开服日期 通关

其中消耗物品占比80% 针对这一类可再设计

我的做法是维护一张表 物品ID对应操作名称

在同步物品变化时check_item()找到对应的操作 在操作中check下一次是否满足红点显示

 mibao_upskill() {
    return ro.redpoints.client.mibao_upskill = Number(ro.role.mibao.check_enble_skillup(-1));
}

module ro {

export class ConstRedPoint {

public static MATERIAL3 = "client.Material3";

public static MATERIAL4 = "client.Material4";

public static MATERIAL6 = "client.Material6";

public static MATERIAL1 = "client.Material1";

public static MATERIAL5 = "client.Material5";

public static MATERIAL2 = "client.Material2";

public static EXPFUBEN1 = "client.ExpFuben1";

public static EXPFUBEN3 = "client.ExpFuben3";

public static EXPFUBEN2 = "client.ExpFuben2";

public static TOWERDAYREWARD = "client.TowerDayReward";

public static TOWERTURN = "client.TowerTurn";

public static TOWERPOINT = "client.TowerPoint";

public static DUOLICATE_MATERFUBEN = "client.duolicate_MaterFuben";

public static DUOLICATE_EXPFUBEN = "client.duolicate_ExpFuben";

public static DUOLICATE_TOWER = "client.duolicate_Tower";

public static ZHUZAO_UPLEVEL = "client.zhuzao_uplevel";

public static QIANGHUA_UPLEVEL = "client.qianghua_uplevel";

public static JINGLIAN_UPLEVEL = "client.jinglian_uplevel";

public static FORGE_CAST = "client.forge_cast";

public static FORGE_ENCHAN = "client.forge_enchan";

public static FORGE_CARD = "client.forge_card";

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity红点系统是一种常用的游戏UI设计,主要用于提醒玩家当前有新的任务、奖励或其他未读信息需要处理。下面是一个简单的Unity红点系统设计: 1. 定义红点控件:在UI界面中添加一个红点控件,通常是一个小圆点或小数字。该控件需要有一个唯一的名称,用于后续的操作。 2. 定义红点数据结构:为每个需要红点提醒的功能定义一个红点数据结构,包含以下信息: - 功能名称:用于标识该功能。 - 红点控件名称:与UI界面中的红点控件名称对应。 - 是否需要红点提醒:标识该功能是否需要红点提醒。 - 红点数量:如果需要显示数字红点,则需要记录具体的数量。 3. 定义红点管理类:创建一个红点管理类,用于管理所有的红点数据和UI界面上的红点控件。该类需要提供以下功能: - 添加红点数据:向红点管理类中添加新的红点数据。 - 更新红点状态:根据红点数据中的信息,更新UI界面上对应的红点控件状态。 - 监听红点变化:提供回调函数,当某个红点数据的状态发生变化时,通知相应的UI界面进行更新。 4. 使用红点系统:在需要使用红点系统的地方,调用红点管理类的方法添加红点数据和监听红点变化。当红点数据的状态发生变化时,红点管理类会自动更新UI界面上的红点控件状态。 通过以上步骤,就可以实现一个简单的Unity红点系统。当玩家有新的任务或奖励时,红点控件会自动提醒玩家,增强了游戏的交互性和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值