//被攻击受伤后退 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; }
public void OnDamage(AttackDir nowAtkDir) { if (isDeath) { return; } StartCoroutine(onDamageing(nowAtkDir)); }
/// <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; }
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(); } } }
// 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; } } }