目录 攻击协议④
不懂这是什么的小伙伴建议先看初始化流程①哦~
攻击协议(PrefabEvtFight)
这个协议用于传递战斗信息,比如击中目标、伤害发起、治疗还有复活之类的通知,可以让。在使用这个的协议的时候,受害方只需要去监听相关的击中信息,而发起方只需要去提供通知就可以完成这一套流程。可以用在陷阱的制作,敌人的制作以及角色战斗上。
这个协议中也包含了装备通知,当前的装备枚举只包含了武器一种类型,这个协议主要是让不同的装备预制体去互斥,在装备一个武器的时候去发起这个通知,然后所有的装备类预制体都会监听这个消息,在装备的预制体不是自己的时候去卸载已经装备的武器,使得装备槽只存在一个预制体作为主装备。
示例-可破坏物体:
这里的示例需要提前先安装玩家系统、冷兵器或者热武器预制体。
这一段代码中通过在服务端注册了受击事件,并且在自己维护的hp小于0后广播了死亡的事件。也通过hurt接口去伤害了目标源。这个脚本可以放置在一个不是触发器的模型下面。
private _currHp: number = 100;
protected onStart() {
if (Util.SystemUtil.isServer()) {
//受击事件监听
PrefabEvent.PrefabEvtFight.onHit(this.server_onHit.bind(this));
}
}
private server_onHit(senderGuid: string, targetGuid: string, damage: number, hitPoint: Type.Vector) {
//被伤害的目标是否是自己
if (targetGuid != this.gameObject.guid) return;
//如果已经死亡则不重复处理
if (this._currHP <= 0) return;
//扣血逻辑
this._currHP -= damage;
if (this._currHP <= 0) {
//处理死亡事件
PrefabEvent.PrefabEvtFight.die(this.gameObject.guid);
}
//攻击反伤
if (this._currHP >= 0) {
if (this.counterAttackDamage != 0) {
PrefabEvent.PrefabEvtFight.hurt(this.gameObject.guid, senderGuid, 20);
}
}
}
|