// 캐릭터의 Attack.cs 에서 호출하는 함수 public void MagicAttackStart(Character user, GameObject target, TakeDamageInfo takeDamageInfo) { init(); this.user = user; targetObject = target; targetTag = target.tag; startPosition = transform.position; targetPosition = target.transform.position; this.takeDamageInfo = takeDamageInfo; var particle = GetComponent <ParticleSystem>().shape; var rotation = particle.rotation; if (startPosition.x >= targetPosition.x) { rotation.y = 180; particle.rotation = rotation; } else { rotation.y = 0; particle.rotation = rotation; } normVector = Vector3.Normalize(targetPosition - gameObject.transform.position); ready = true; }
protected void takeAttack(TakeDamageInfo info) { if (!isAlive) { return; } int damage = info.damage; // 방어력 수식 변경 방어력 200일때 데미지 50%감소, 400일때 66.6% 감소 int armor = (int)(character.characterInfo.armor + character.characterInfo.addedArmor); if (gameObject.tag == "unit") { // 계열 방어력 배율 armor = (int)(armor * Database.Instance.unitMultipleDefDict[character.characterInfo.unitName]); } if (armor <= 0) { armor = 0; } damage = (int)(info.damage * 200 / (200 + armor)); if (gameObject.tag == "unit") { // 유물 데미지 감소 계산 damage = ArtifactManager.Instance.CalcTakeDamage(damage); } if (damage < 1) { damage = 1; } var floatingTextTMP = GetFloatingTextBasis(damage);//GetFloatingTextBasis(damage); switch (info.skillInfo.damageType) { // 마법데미지 추후작성 일단 노말이랑 같이 처리 case DamageType.MagicDamage: case DamageType.Normal: if (!info.isCritical) { floatingTextTMP.colorGradientPreset = damageColor; } else { floatingTextTMP.colorGradientPreset = criticalDamageColor; } break; case DamageType.DotDamage: floatingTextTMP.colorGradientPreset = dotDamageColor; floatingTextTMP.fontSize = 50f; break; default: break; } floatingTextTMP.gameObject.SetActive(true); float remainHP = character.characterInfo.currentHP - damage; if (remainHP <= 0) { character.characterInfo.currentHP = 0; die(); } else { character.characterInfo.currentHP = remainHP; /* * if (Animator.StringToHash("Base Layer.Idle") == animator.GetCurrentAnimatorStateInfo(0).fullPathHash) * { * animator.SetTrigger(animName_hurt); * }*/ StopAllCoroutines(); StartCoroutine(takeAttackColorChangeCoroutine()); } }// 공격맞을 때 처리할부분