//effects public AnimAttackData(string animName, GameObject trail, float moveDistance, float hitTime, float attackEndTime, float hitDamage, float hitAngle, float hitMomentum, E_CriticalHitType criticalType, bool areaKnockDown) { AnimName = animName; Trail = trail; if (Trail) { Parent = Trail.transform.parent; if (Trail.transform.Find("dust")) { Dust = Trail.transform.Find("dust").gameObject; AnimationDust = Dust.GetComponent <Animation>(); MaterialDust = Dust.GetComponent <Renderer>().material; } Animation = Trail.transform.parent.GetComponent <Animation>(); if (Trail.GetComponentInChildren(typeof(Renderer))) { Material = (Trail.GetComponentInChildren(typeof(Renderer)) as Renderer).material; } else if (Trail.GetComponentInChildren(typeof(SkinnedMeshRenderer))) { Material = (Trail.GetComponentInChildren(typeof(SkinnedMeshRenderer)) as Renderer).material; } else { Material = null; } if (Material == null) { Debug.LogError("Trail - no Material"); } } else { Animation = null; Material = null; } MoveDistance = moveDistance; AttackEndTime = attackEndTime; AttackMoveStartTime = 0; AttackMoveEndTime = AttackEndTime * 0.7f; HitTime = hitTime; HitDamage = hitDamage; HitAngle = hitAngle; HitMomentum = hitMomentum; HitCriticalType = criticalType; HitAreaKnockdown = areaKnockDown; BreakBlock = false; UseImpuls = false; CriticalModificator = 1; }
/// <summary> /// Receives the critical hit. /// 重击,一击必杀,出现碎尸效果 /// </summary> /// <param name="attacker">Attacker.</param> /// <param name="type">Type.</param> /// <param name="effectOnly">If set to <c>true</c> effect only.</param> public void ReceiveCriticalHit(Agent attacker, E_CriticalHitType type, bool effectOnly = false) { // Legs = 0, Beheaded, HalfBody, SliceFrontBack, SliceLeftRight, if (attacker.IsPlayer) { Game.Instance.Hits += 1; Game.Instance.Score += Experience; Player.Instance.AddExperience(Experience, 1.5f + Game.Instance.Hits * 0.1f); Game.Instance.NumberOfCriticals++; } BlackBoard.Stop = true; BlackBoard.Health = 0; if (type == E_CriticalHitType.Horizontal) { int r = Random.Range(0, 100); if (r < 33) { MissionZone.Instance.GetDead(this, E_DeadBodyType.Legs); } else if (r < 66) { MissionZone.Instance.GetDead(this, E_DeadBodyType.Beheaded); } else { MissionZone.Instance.GetDead(this, E_DeadBodyType.HalfBody); } } else { float dot = Vector3.Dot(Forward, attacker.Forward); if (dot < 0.5 && dot > -0.5f) { MissionZone.Instance.GetDead(this, E_DeadBodyType.SliceLeftRight); } else { MissionZone.Instance.GetDead(this, E_DeadBodyType.SliceFrontBack); } } CombatEffectsManager.Instance.PlayCriticalEffect(Transform.position, -attacker.Forward); MissionZone.Instance.ReturnHuman(GameObject); }