/// <summary> /// 当BaseUnit被攻击时,会调用该回调事件 /// </summary> private void OnSubHp(BaseUnit source, float subHp, DamageType damageType, HpShowType showType) { string unitName = string.Empty;//string.Empty在内存堆里分配空间 ""在内存栈里分配空间 string missStr = "闪避"; string damageTypeStr = string.Empty; string damageHp = string.Empty; if (showType == HpShowType.Miss) { Debug.Log(missStr); return; } if (source.IsHero) { unitName = "英雄"; } else { unitName = "士兵"; } damageTypeStr = damageType == DamageType.Critical ? "暴击" : "普通攻击"; damageHp = subHp.ToString(); Debug.Log(unitName + damageTypeStr + damageHp); }
//OnBeAttacked方法需要3个参数,分别是 //表示伤害数字的float型的harmNumber //表示是否是暴击伤害的bool型的isCritical //表示是否是闪避的bool型isMiss protected virtual void OnBeAttacked(float harmNumber, bool isCritical, bool isMiss) { DamageType damageType = DamageType.Normal; HpShowType showType = HpShowType.Damage; if (isCritical) { damageType = DamageType.Critical; } if (isMiss) { showType = HpShowType.Miss; } //首先判断是否有方法订阅了该事件,如果有则通知它们 if (OnSubHp != null) { OnSubHp(this, harmNumber, damageType, showType); } }