Выход сопрограммы Unity, похоже, закрывает сопрограмму каждый раз

#c# #unity3d

Вопрос:

Эй, я уже довольно давно работаю над этим кодом, связанным с повреждением во времени, я использовал МНОГО онлайн-ресурсов, и у меня есть множество попыток попробовать это, но это не сработало, поэтому я пришел сюда. ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Мой объект не разрушается при выходе, он просто достигает выхода, и ничего не происходит.

 if(CurrentStatus == Status.Burning amp;amp; burning==false){
burning=true;
    StartCoroutine (DamageOverTimeCoroutine(100, 5));
    Debug.Log("what");
    burning = false;
    //CurrentStatus = Status.Empty;
 

}

 public IEnumerator DamageOverTimeCoroutine(float damageAmount, float duration){
        float amountDamaged = 0;
        float damagePerLoop = damageAmount / duration;
        while (amountDamaged < damageAmount) {
            int numInt = (int)Math.Ceiling(damagePerLoop);
            enemyCurrentHealth -= numInt;
            var clone = (GameObject) Instantiate(damageNumber, this.gameObject.transform.position, Quaternion.Euler(Vector3.zero));
            clone.GetComponent<FloatingNumbers> ().damageNumber = numInt;
            amountDamaged  = damagePerLoop;
            yield return null;
            Debug.Log(amountDamaged);
        }
        if(amountDamaged>damageAmount){
            //StopCoroutine(DamageOverTimeCoroutine());
        }
        CurrentStatus = Status.Empty;
        burning=false;
    }
 

Повторяю, это наносит ущерб, а затем прекращается по доходности, я изменил его с waitSeconds только для того, чтобы посмотреть, сработает ли это по-другому, это не так. У меня никогда не было отладки после пожара с выходом. Почему это происходит?

Был бы очень признателен, спасибо

Комментарии:

1. вы где-нибудь отключаете или уничтожаете этот объект?

2. Я знаю, что это как-то не по теме, но как побочная заметка StopCoroutine(DamageOverTimeCoroutine()); не сработает, даже если ваш результат сработает. Когда вы звоните StopCoroutine , вы должны передать ему фактический IEnumerator экземпляр, с которого вы запустили сопрограмму (т. е. тот, который вернулся при DamageOverTimeCoroutine() вызове, StartCoroutine(DamageOverTimeCoroutine()) просто сообщив вам об этом, потому что эта проблема в прошлом вызывала у меня много-много проблем!

3. Что вы передали в качестве значения продолжительности? Я предполагаю, что вы хотите, чтобы продолжительность составляла секунды, но здесь речь идет о количестве кадров. Может ли быть так, что значение длительности равно 1?

Ответ №1:

Как я понял, клон var = (GameObject) Инстанцирует(damageNumber, this.GameObject.transform.position, Кватернион.Эйлера(Вектор3.ноль)); клон.GetComponent ().damageNumber = Число;

короткие строки обводили его, не выдавая ошибки. Странно, но сейчас это работает. Спасибо за помощь, ребята