GameAbilitySystem|01 Tag 游戏标签
Tag,是一个纯标记位,自身不带有任何逻辑
namespace GameAbilitySystem
{
/// <summary>
/// 游戏标签,通过父子标签实现的一种树状结构,仅标记,没有逻辑也没有数据
/// </summary>
[CreateAssetMenu(menuName = "GameAbilitySystem/Tag")]
public class GameTag : ScriptableObject
{
[SerializeField]
private GameTag parent;
/// <summary>
/// 是否是另一个标签的孩子
/// </summary>
/// <param name="other">另一个标签</param>
/// <param name="depth">深度</param>
/// <returns></returns>
public bool IsDescendantOf(GameTag other, int depth = 8)
{
if (this == other)
return true;
int i = 0;
var tag = parent;
while (depth > i++)
{
if (!tag)
return false;
if (tag == other)
return true;
tag = tag.parent;
}
return false;
}
}
}
标签是链式父子结果,一个标签可以有他的父标签,也可以通过接口判断某个标签是否是另一个标签的子节点
这有什么用呢?
举例来说,燃烧可以是一个标签,Burning,当然他可以有一个父标签,比如是Debuff
这很好理解,燃烧是异常状态下的一个子项,异常状态还可以有其他很多子项
此时如果有一个技能需要清除所有的异常状态,那只需要筛选父标签Debuff即可
当然标签还有其他作用,可以说标签就是GAS的灵魂
比如说技能冷却,即释放技能A时,必须不存在A的CD标签