Пример #1
0
    // 캐릭터의 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;
    }
Пример #2
0
    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());
        }
    }// 공격맞을 때 처리할부분