Esempio n. 1
0
    //被攻击受伤后退
    IEnumerator onDamageing(AttackDir nowAtkDir)
    {
        isDamage = true;
        if (nowAtkDir == AttackDir.Left)
        {
            E_body.velocity = new Vector2(-10f, 0);
        }
        else if (nowAtkDir == AttackDir.Right)
        {
            E_body.velocity = new Vector2(10f, 0);
        }
        else if (nowAtkDir == AttackDir.Down)
        {
        }
        hp -= 1;
        if (hp <= 0)
        {
            Death();
        }
        yield return(new WaitForSeconds(0.2f));

        E_body.velocity = Vector2.zero;
        if ((int)nowDir == (int)nowAtkDir)
        {
            StartPosition        = transform.position;
            nowDir               = (EnemyDir)(-(int)nowDir);
            transform.localScale = new Vector2((int)nowDir, 1);
        }
        yield return(new WaitForSeconds(0.3f));

        //E_body.velocity = Vector2.zero;
        isDamage = false;
    }
Esempio n. 2
0
 public void OnDamage(AttackDir nowAtkDir)
 {
     if (isDeath)
     {
         return;
     }
     StartCoroutine(onDamageing(nowAtkDir));
 }
Esempio n. 3
0
    /// <summary>
    ///
    /// </summary>
    /// <param 攻击方向="dir"></param>
    /// <returns></returns>
    IEnumerator AttackLock(AttackDir dir)
    {
        attackEffectDir = null;
        isInput         = false;
        switch (dir)
        {
        case AttackDir.Up:
            P_animator.SetTrigger("AttackUp");
            attackDir       = AttackDir.Up;
            attackEffectDir = attackEffect.transform.Find("AttackUp").gameObject;
            AttackCheck(3);
            break;

        case AttackDir.Right:
            P_animator.SetTrigger("AttackRight");
            attackDir       = AttackDir.Right;
            attackEffectDir = attackEffect.transform.Find("AttackLeft").gameObject;
            AttackCheck(1);
            break;

        case AttackDir.Left:
            P_animator.SetTrigger("AttackLeft");
            attackDir       = AttackDir.Left;
            attackEffectDir = attackEffect.transform.Find("AttackLeft").gameObject;
            AttackCheck(-1);
            break;

        case AttackDir.Down:
            P_animator.SetTrigger("AttackDown");
            if (!isGround)
            {
                attackEffectDir = attackEffect.transform.Find("AttackDown").gameObject;
                attackDir       = AttackDir.Down;
                AttackCheck(4);
            }
            break;
        }
        if (attackEffectDir)
        {
            attackEffectDir.SetActive(true);
        }
        yield return(new WaitForSeconds(0.15f));

        if (attackEffectDir)
        {
            attackEffectDir.SetActive(false);
        }
        isInput = true;
    }
Esempio n. 4
0
    private void Attack(AttackDir attackDir, bool initial)
    {
        Collider2D[] enemiesToDamage;
        Collider2D[] bulletsHit;
        if (initial)
        {
            audioManager.PlaySound("swordSwing");
            if (attackDir == AttackDir.Horizontal)
            {
                enemiesToDamage = Physics2D.OverlapCircleAll(attackPosHorizontal.position, attackRange, whatIsEnemies);
                bulletsHit      = Physics2D.OverlapCircleAll(attackPosHorizontal.position, attackRange, whatIsBullet);
                animator.SetTrigger("attackHor");
            }
            else if (attackDir == AttackDir.Up)
            {
                enemiesToDamage = Physics2D.OverlapCircleAll(attackPosUp.position, attackRange, whatIsEnemies);
                bulletsHit      = Physics2D.OverlapCircleAll(attackPosUp.position, attackRange, whatIsBullet);
                animator.SetTrigger("attackUp");
            }
            else
            {
                enemiesToDamage = Physics2D.OverlapCircleAll(attackPosDown.position, attackRange, whatIsEnemies);
                bulletsHit      = Physics2D.OverlapCircleAll(attackPosDown.position, attackRange, whatIsBullet);
                if (enemiesToDamage.Length > 0)
                {
                    rb.velocity = (new Vector2(0, 0));
                    rb.AddForce(new Vector2(0, attackDownJump), ForceMode2D.Impulse);
                }

                animator.SetTrigger("attackDown");
            }
            damagedEnemies = new List <Collider2D>();
        }
        else
        {
            List <Collider2D> list;
            if (attackDir == AttackDir.Horizontal)
            {
                enemiesToDamage = Physics2D.OverlapCircleAll(attackPosHorizontal.position, attackRange, whatIsEnemies);
                bulletsHit      = Physics2D.OverlapCircleAll(attackPosHorizontal.position, attackRange, whatIsBullet);
                list            = new List <Collider2D>(enemiesToDamage);
            }
            else if (attackDir == AttackDir.Up)
            {
                enemiesToDamage = Physics2D.OverlapCircleAll(attackPosUp.position, attackRange, whatIsEnemies);
                bulletsHit      = Physics2D.OverlapCircleAll(attackPosUp.position, attackRange, whatIsBullet);
                list            = new List <Collider2D>(enemiesToDamage);
            }
            else
            {
                enemiesToDamage = Physics2D.OverlapCircleAll(attackPosDown.position, attackRange, whatIsEnemies);
                bulletsHit      = Physics2D.OverlapCircleAll(attackPosDown.position, attackRange, whatIsBullet);
                list            = new List <Collider2D>(enemiesToDamage);
                foreach (Collider2D enemy in enemiesToDamage)
                {
                    if (damagedEnemies.Contains(enemy))
                    {
                        list.Remove(enemy);
                    }
                }
                if (list.Count > 0)
                {
                    rb.velocity = (new Vector2(0, 0));
                    rb.AddForce(new Vector2(0, attackDownJump), ForceMode2D.Impulse);
                }
            }
            if (attackDir != AttackDir.Down)
            {
                foreach (Collider2D enemy in enemiesToDamage)
                {
                    if (damagedEnemies.Contains(enemy))
                    {
                        list.Remove(enemy);
                    }
                }
            }
            enemiesToDamage = list.ToArray();
        }

        Rigidbody2D enemyRB;

        for (int i = 0; i < enemiesToDamage.Length; i++)
        {
            GameMaster.DamageEnemy(enemiesToDamage[i].GetComponent <Enemy>(), dmg);
            damagedEnemies.Add(enemiesToDamage[i]);

            // Instantiate(explosion, new Vector2(enemiesToDamage[i].transform.position.x + Random.Range(-0.2f, 0.2f), enemiesToDamage[i].transform.position.y + Random.Range(-0.2f, 0.2f)), Quaternion.identity);
            //Instantiate(splash, new Vector2(enemiesToDamage[i].transform.position.x +  5f + Random.Range(-0.2f, 0.2f), enemiesToDamage[i].transform.position.y + Random.Range(-0.2f, 0.2f)), Quaternion.Euler(0f, -262.433f,0f));
            // enemiesToDamage[i].GetComponent<Enemy>().takeDamage(dmg);
            enemyRB = enemiesToDamage[i].GetComponent <Rigidbody2D>();

            if (facingRight)
            {
                enemyRB.AddForce(new Vector2(xPushBack, yPushBack), ForceMode2D.Impulse);
            }
            else
            {
                enemyRB.AddForce(new Vector2(-xPushBack, yPushBack), ForceMode2D.Impulse);
            }
        }

        for (int i = 0; i < bulletsHit.Length; i++)
        {
            Arrow arrow = bulletsHit[i].GetComponent <Arrow>();
            if (arrow != null)
            {
                arrow.revert();
            }
        }
    }
Esempio n. 5
0
    // Update is called once per frame
    void Update()
    {
        if (MovementEnabled)
        {
            Jump();

            if (_attackCD <= 0)
            {
                //if (Input.GetKeyDown(KeyCode.I))
                if (Input.GetButtonDown("Attack"))
                {
                    _attackCD = attackCD;
                    if (Input.GetAxisRaw("Vertical") > 0.5)
                    {
                        Attack(AttackDir.Up, true);
                        currentAttack = AttackDir.Up;
                    }
                    else if (Input.GetAxisRaw("Vertical") < -0.5)
                    {
                        Attack(AttackDir.Down, true);
                        currentAttack = AttackDir.Down;
                    }
                    else
                    {
                        Attack(AttackDir.Horizontal, true);
                        currentAttack = AttackDir.Horizontal;
                    }
                }
            }
            else
            {
                Attack(currentAttack, false);
            }

            if (Input.GetButtonDown("Blink") && !blinking && canBlink)
            {
                blinking = true;
                Blink();
            }

            if (Input.GetButtonDown("Dash") && canDash)
            {
                GameMaster.ShakeCamera();
                audioManager.PlaySound("dash");
                isDashing = true;
                Instantiate(dashTrail, new Vector3(transform.position.x - 0.95f, transform.position.y - 1.76f, 0f), Quaternion.identity, this.transform);
                Instantiate(dashTrail, new Vector3(transform.position.x - 0.95f, transform.position.y - 0.86f, 0f), Quaternion.identity, this.transform);
                Instantiate(dashTrail, new Vector3(transform.position.x - 0.95f, transform.position.y + 0.05f, 0f), Quaternion.identity, this.transform);
                Instantiate(dashTrail, new Vector3(transform.position.x - 0.95f, transform.position.y + 0.97f, 0f), Quaternion.identity, this.transform);
            }

            if (Input.GetButtonDown("Aim"))
            {
                Time.timeScale = 0.5f;
                aimArrow.SetActive(true);
                aiming = true;
            }

            if (Input.GetButtonUp("Aim"))
            {
                Time.timeScale = 1f;
                aimArrow.SetActive(false);
                aiming = false;
            }

            if (aiming && Input.GetButtonDown("Shoot") && !spearAvailable)
            {
                SpearInstance = Instantiate(SpearContainer, this.transform.position, Quaternion.identity);
                Spear         = SpearInstance.transform.GetChild(0).gameObject;
                Spear.transform.localRotation = Quaternion.Euler(0, 0, aimArrow.transform.eulerAngles.z);

                spearAvailable = true;
                //Spear.SetActive(true);
            }

            if (aiming && Input.GetButtonDown("Shoot") && spearAvailable)
            {
                Spear.transform.localRotation = Quaternion.Euler(0, 0, aimArrow.transform.eulerAngles.z);
            }

            if (!aiming && Input.GetButtonDown("Shoot") && spearAvailable)
            {
                transform.position = Spear.transform.position;
                Destroy(SpearInstance.gameObject);
                spearAvailable = false;
            }
        }
    }