簡體   English   中英

IEnumerator不等待秒

[英]IEnumerator not waiting for seconds

我創建了一個IEnumerator以便敵人在接觸時不會立即殺死玩家。 該代碼昨天工作正常,但現在IEnumerator似乎已被完全忽略。 Unity 3d控制台也不顯示任何錯誤。

我試圖降低損壞程度以檢查是否過高,但事實並非如此。

以下是代碼:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class enemyAI : MonoBehaviour {
  [SerializeField]
  float chaseDistance = 5.0f;
  public float damageAmount = 1.0f;

  void Update () {
    dist = Vector3.Distance(target.position, transform.position);
    float distance = Vector3.Distance(transform.position, target.position);
    if (distance < chaseDistance )
    {
      AttackPlayer();
    }
  }

  void AttackPlayer()
  {
    agent.updateRotation = false;
    Vector3 direction = target.position - transform.position;
    direction.y = 0;
    transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(direction), turnSpeed * Time.deltaTime); 
    agent.updatePosition = false;
    anim.SetBool("isWalking", false);
    anim.SetBool("isAttacking", true);
    StartCoroutine(AttackTime());
  }

  IEnumerator AttackTime()
  {
    canAttack = false;
    yield return new WaitForSeconds(0.5f);
    Player.singleton.Damage(damageAmount);
    yield return new WaitForSeconds(2.0f);
    canAttack = true;
  }
}
//Player Script {
public class Player : MonoBehaviour {
  public static Player singleton;
  public  float currentHealth;
  public static float maxHealth = 100f;
  public bool isDead = false;

  private void Awake()
  {
    singleton = this;
  }

  // Use this for initialization
  void Start () {
    currentHealth = maxHealth;
  }

  // Update is called once per frame
  void Update () {
    if (currentHealth < 0)
    {
      currentHealth = 0;
    }
  }

  public void Damage(float damage)
  {
    if(currentHealth > 0)
    {
      currentHealth -= damage;
    }
    else
    {
      currentHealth = 0;
    }
  }

  void Dead()
  {
    currentHealth = 0;
    isDead = true;
  }
}

您正在“ Update()”中啟動“ AttackPlayer”協程-因此,當敵人在射程內時,您將每秒啟動約60個協程。 當您想要一個。

您已經將“ canAttack”設置為“ false”-也許在Update的范圍條件中添加“ && canAttack”?

喜歡

    if (distance < chaseDistance && canAttack)
    {

        AttackPlayer();
    }

嘗試輸入“ canAttack = false;” 低於產量命令

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM