首先,每个人物都要实现一个检测自己是否受到伤害的函数,public virtual void DamageCheck(object sender,DamageCheckEventArgs e)
这里sender指的是谁调用了这个函数,DamageCheckEventArgs派生自EventArgs,存放一些信息,如攻击方的攻击范围,朝向等
用这种方式几乎涵盖了我们需要的所有信息,而且十分灵活,如果我们需要多获取某个信息,直接修改EventArgs即可,比把每个信息单独作为参数传递要方便许多
public class DamageCheckEventArgs : EventArgs {
public enum DamageType
{
Instant = 0,
Delay = 1,
}
public DamageType damageType;
public EquipmentStatus senderEquip;
public Vector3 senderPos;
public int senderDirect;
public int senderCamp;
}
如果项目比较大的话,我建议把这个函数单独写成一个类,
定义一个EventManager单例类,用来管理各种事件,向下面这样,至于怎么弄单例我就不写了,网上很多资料
public class EventManager:UnitySingleton<EventManager>{
public delegate void EventHandler(object sender,DamageCheckEventArgs e);
public event EventHandler DamageCheckEvent;
public void DamageCheck(object sender,DamageCheckEventArgs e) { DamageCheckEvent(sender,e); }
}