Пример #1
0
    protected IEnumerator Attack() // 공격
    {
        //방향 설정
        if (curTileForMove != enemy.GetCurTileForMove())
        {
            SetAnimDirection(curTileForMove.GetDirectionFromOtherTileForMove(enemy.GetCurTileForMove()));
        }
        else
        {
            SetAnimDirection(GetDirectionToPosition(enemy.GetPosition()));
        }
        animator.SetTrigger("AttackFlg");
        animator.SetFloat("AttackSpeed", battleStat.AttackSpeed);
        yield return(new WaitForSeconds(0.43f / battleStat.AttackSpeed)); // 애니메이션 관련 넣을 것.

        // 어차피 이벤트로 나가는데 필요한지?
        if (!ValidatingEnemy(enemy))
        {
            yield break;
        }

        SkillBeforeAttack();

        bool  isCrit;
        float calculatedDamage;

        battleStat.CalDamage(out calculatedDamage, out isCrit);

        float actualDamage;

        if (enemy.TakeDamage(this, calculatedDamage, battleStat.PenetrationFixed, battleStat.PenetrationMult, isCrit, out actualDamage))
        {
            DisplayAttackEffect(enemy);
            SkillOnAttack(actualDamage, isCrit, false);
        }

        SkillAfterAttack();

        yield return(new WaitForSeconds(0.57f / battleStat.AttackSpeed)); // 애니메이션 관련 넣을 것.
        //attackEffect.GetComponent<AttackEffect>().StopEffect();
    }
Пример #2
0
    protected IEnumerator Attack() // 공격
    {
        //방향 설정
        if (curTileForMove != enemy.GetCurTileForMove())
        {
            SetAnimDirection(curTileForMove.GetDirectionFromOtherTileForMove(enemy.GetCurTileForMove()));
        }
        else
        {
            SetAnimDirection(GetDirectionToPosition(enemy.GetPosition()));
        }

        animator.SetTrigger("AttackFlg");
        animator.SetFloat("AttackSpeed", battleStat.AttackSpeed); // 공격 속도에 맞춰 애니메이션.
        yield return(new WaitForSeconds(0.43f / battleStat.AttackSpeed));

        // 어차피 이벤트로 나가는데 필요한지?
        if (!ValidatingEnemy(enemy))
        {
            yield break;
        }

        bool  isCrit;
        float calculatedDamage;

        battleStat.CalDamage(out calculatedDamage, out isCrit);

        float actualDamage;

        if (enemy.TakeDamage(this, calculatedDamage, battleStat.PenetrationFixed, battleStat.PenetrationMult, isCrit, out actualDamage))
        {
            attackEffect.transform.position = new Vector3(enemy.GetPosition().x * 0.9f + transform.position.x * 0.1f, enemy.GetPosition().y * 0.9f + transform.position.y * 0.1f, enemy.GetPosition().z * 0.5f + transform.position.z * 0.5f);
            attackEffect.transform.rotation = Quaternion.Euler(0, 0, Random.Range(0, 180f));
            attackEffect.GetComponent <AttackEffect>().StartEffect();
        }

        yield return(new WaitForSeconds(0.57f / battleStat.AttackSpeed));

        attackEffect.GetComponent <AttackEffect>().StopEffect();
    }