Beispiel #1
0
        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
Beispiel #4
0
        /// <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
        }
Beispiel #5
0
 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