protected override void OnTriggerEnter(Collider col) { if (col.gameObject.layer == (int)ObjectLayer.Player) { RealAttack = BasicAttack * AttackFactor; //传参给Player告知受伤 TransformForward = EnemyMedi.EnemyMono.transform.forward; PlayerHurtAttr.ModifyAttr((int)RealAttack, VelocityForward, VelocityVertical, TransformForward, canDefeatedFly, DefeatedDown); if (IsOnlyPlayer) { if (OnlyPlayerMono == null) { OnlyPlayerMono = col.GetComponent <IPlayerMono>(); } // 击倒在地会由Hurt判断 OnlyPlayerMono.Hurt(PlayerHurtAttr); } if (hitEffectPath != string.Empty) { resourcesMgr.LoadAsset(hitEffectPath, true, transform.position, Quaternion.identity); } //HasHit = true; //OnWeaponHit.Invoke(); } } // end_function
public override void Hurt(PlayerHurtAttr playerHurtAttr) { if (stateInfo.IsName("Dead")) { return; } animator.SetTrigger(animHurt); CurrentHP -= playerHurtAttr.Attack; Debug.Log("PlayerHurt:" + playerHurtAttr.Attack); }
public override void Attack() { // 特效 muzzleFlashEffect.SetActive(true); // 击中概率 if (Random.Range(0, 1) < 0.5f) { RealAttack = BasicAttack; // 传参给enemy告知受伤 TransformForward = EnemyMedi.EnemyMono.transform.forward; PlayerHurtAttr.ModifyAttr((int)RealAttack, VelocityForward, VelocityVertical, TransformForward); player.GetComponent <IPlayerMono>().Hurt(PlayerHurtAttr); // 特效 resourcesMgr.LoadAsset(bloodEffect, true, player.position + Vector3.up, Quaternion.identity); } } // end_function
/// <summary> /// 触发动画,伤害计算,死亡判断 /// </summary> /// <param name="damage"></param> public override void Hurt(PlayerHurtAttr playerHurtAttr) { if (stateInfo.IsName("Dead") || stateInfo.IsName("Dush")) { return; } Rgbd.velocity = playerHurtAttr.TransformForward * playerHurtAttr.VelocityForward; animator.applyRootMotion = false; // 关闭rootmotion // 击飞 if (playerHurtAttr.CanDefeatedFly) { if (playerHurtAttr.TransformForward != Vector3.zero) { GameObjectInScene.transform.forward = -playerHurtAttr.TransformForward; } animator.SetTrigger(aniDefeated); } // 击倒 else if (playerHurtAttr.DefeatedDown) { // 由于y轴可能不为0 if (playerHurtAttr.TransformForward != Vector3.zero) { GameObjectInScene.transform.forward = new Vector3(-playerHurtAttr.TransformForward.x, 0, -playerHurtAttr.TransformForward.z); } animator.SetTrigger(aniDownGround); // 切换layer,到动画结束后再切换回来 GameObjectInScene.layer = (int)ObjectLayer.Without; } // 受伤 else { animator.SetTrigger(aniHurt); } //int damage = _playerHurtAttr.Attack * _playerHurtAttr.Attack /(_playerHurtAttr.Attack + DefendPoint); int damage = playerHurtAttr.Attack - DefendPoint; CurrentHP -= damage; Debug.Log("PlayerHurt:" + damage); katanaAnimEvent.TrailSwitch(0); // close Trail }
protected override void OnTriggerEnter(Collider col) { if (col.gameObject.layer == (int)ObjectLayer.Player) { RealAttack = BasicAttack * AttackFactor; //传参给Player告知受伤 PlayerHurtAttr.ModifyAttr((int)RealAttack, VelocityForward, VelocityVertical, TransformForward, canDefeatedFly); if (IsOnlyPlayer) { if (OnlyPlayerMono == null) { OnlyPlayerMono = col.GetComponent <IPlayerMono>(); } OnlyPlayerMono.Hurt(PlayerHurtAttr); } else { col.GetComponent <IPlayerMono>().Hurt(PlayerHurtAttr); } } } // end_function