コード例 #1
0
    private IEnumerator DealDelayedDamagedRoutine(AttackDirectionData attackData, float applyDamageDelay)
    {
        bool           finished       = false;
        ParticleSystem attackParticle = attackData.attackParticle;

        attackParticle.Play();

        while (!finished)
        {
            yield return(new WaitForSeconds(applyDamageDelay));

            //Collider2D[] detectedDamageables = Physics2D.OverlapCircleAll(damageColliderPos.position, attackRange, enemyFilter);
            Collider2D[] detectedDamageables = Physics2D.OverlapBoxAll(attackData.attackLocation.position, attackData.attackDirectionColliderSize, enemyFilter);

            if (detectedDamageables.Length > 0)
            {
                for (int i = 0; i < detectedDamageables.Length; i++)
                {
                    if (detectedDamageables[i].gameObject != gameObject)
                    {
                        IDamageable damageable = detectedDamageables[i].GetComponent <IDamageable>();

                        if (damageable != null)
                        {
                            damageable.TakeDamage(this.gameObject.transform, damageAmount);
                        }
                    }
                }
            }

            finished = true;
            yield return(null);
        }
    }
コード例 #2
0
    private AttackDirectionData GetAttackData()
    {
        float attackDirection          = characterBase.FacingDirection;
        AttackDirectionData attackData = attackDirectionData[(int)attackDirection];

        nextAttackDirection = attackData;

        return(attackData);
    }
コード例 #3
0
    private void DealDamage()
    {
        AttackDirectionData attackData = GetAttackData();

        StartCoroutine(DealDelayedDamagedRoutine(attackData, dashAttackDamageDelay));
    }