TEngine--内置红点

TEngine内置红点

TEngine框架内有一个基于UI模块的红点系统,它在Assets/GameScripts/HotFix/GameLogic/Common/RedNote文件夹里。

红点类图

先按照UI模块里的方法添加UI,然后创建一个红点预制件,就可以添加红点相关代码了。

红点类型和红点key

红点类型分为简单类型和数字类型,类型是默认在你设置红点时定义的。红点key是红点id的一种字符串表达,比如你的红点通知类型如下:

1
2
3
4
5
6
7
8
9
10
public enum RedNoteNotify
{
None = 0,
CharacterMain,
ShopMain,
BagMain,
BagUseType,
ExploreMain,
HomeUI,
}

如果红点是在简单类型下,你的红点key就是 枚举的名字
例:BagMain
如果红点是数字类型,那么红点key就是枚举的名字-参数枚举的名字-参数1-参数2
例:BagMain-2-4

RedNoteWidget

RedNotewidget继承自UIWidget,是创建红点的实现类。RedNoteWidget类通过UIbase里的CreateWidget方法进行创建,类里的Oncreate方法实现了RedNoteBehaviour与红点预制件的绑定。
RedNotewidget类的常用方法就是SetNotifyState。下面的这个方法的重载:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public void SetNotifyType(RedNoteNotify notifyType)
{
m_redNote.SetNotifyType(notifyType);
}
public void SetNotifyType(RedNoteNotify notifyType, ulong param1)
{
m_redNote.SetNotifyType(notifyType, param1);
}
public void SetNotifyType(RedNoteNotify notifyType, ulong param1, ulong param2)
{
m_redNote.SetNotifyType(notifyType, param1, param2);
}

public void SetNotifyState(bool state)
{
m_redNote.SetRedNoteState(state);
}

当我们不传参的时候,红点为简单类型;传参时,红点为数字类型。
RedNoteMgr的SetNotifyValue方法和SetNotifyKeyValue方法与该方法作用相同,不过SetNotifyKeyValue用的不是参数,而是红点key。

RedNoteMgr

在红点类图里,RedNoteMgr是用来管理红点的单例类,需要先把这个类初始化,再写红点逻辑。

1
RedNoteMgr.Instance.Init();

这个类里面有红点使用的注释,有经验的直接看注释应该就明白了。

1,增加RedNoteNotify定义,加入新的红点枚举。
2,添加红点关联,关联定义在InitRelation,查看当前有的关联关系,确定是增加还是重新创建
3,把RedNoteBehaviour挂在红点图片上,红点图片一般放置在需要显示红点的按钮/页签上,设置脚本上的枚举类型
4,如果是带参数的红点类型,在红点所在的UI声明红点对象,对参数进行设置,参数统一为uint,一般用一个可以唯一区分的ID。
有多个参数时,每后一个参数节点都是前一个参数的子节点。 无参数为该层级的根节点。
5,红点激活/隐藏:在对应模块数据管理类中,检测达到红点激活条件,或红点消失条件,调用SetNotifyValue激活/隐藏红点

RedNoteMgr注释——红点系统使用说明

RedNoteMgr里比较常用的方法:

SetNotifyValue
GetNotifyValue
SetNotifyKeyValue
GetNotifyKeyValue
GetNotifyPointNum
SetNotifyKeyPointNum

其中SetNotifyKeyPointNum需要注意,当红点预制件有Text时,自动设置红点状态为true;当预制件无Text时,需要手动设置redNodeState


TEngine--内置红点
https://www.liu2dream.fun/post/TEngine--内置红点/
作者
刘老师 MrLiu
发布于
2024年6月23日
许可协议