@Aplexa

Почему скрипт игнорит ожидание?

Запускается скрипт, суть которого "растворить" объект, а затем вернуть его назад. Но мне надо сделать так, чтобы скрипт ждал некоторое время перед появлением/растворением. Сначала все идет нормально, объект "растворяется", ждет некоторое время, а затем снова появляется. Но перед тем, как повторно "раствориться", скрипт не ждет, а просто сразу же "растворяет" объект.
Сам скрипт

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


[RequireComponent(typeof(MeshRenderer))]
public class DissolveLava : MonoBehaviour
{
    private MeshRenderer meshRenderer;

    public float speed = 0.5f;
    private float cut_off = 0.05f;
    private bool end = false, wait = false;
    private float t = 0.0f;
    public float waitEmpty = 1f, waitNotDissolved = 1f;

    private void Start(){
        meshRenderer = this.GetComponent<MeshRenderer>();
    }

    private void Update(){
        if(wait == false){
            if(end == false){
                Dissolve();
            }
            if(end == true){
                UnDissolve();
            }

            if(cut_off > 1f){
                t = 0.0f;
                end = true;
                wait = true;
            }
            if(cut_off < 0.0f){
                t = 0.0f;
                end = false;
                wait = true;
            }
        }

        if(wait == true){
            StartCoroutine(CoolDown());
        }
    }

    private void Dissolve(){        // Растворение объекта
        Material[] mats = meshRenderer.materials;

        cut_off = speed * t;

        mats[0].SetFloat("_Cutoff", cut_off);
        t += Time.deltaTime;

        // так не будет работать -> meshRenderer.materials[0]
        meshRenderer.materials = mats;
    }

    private void UnDissolve(){      // Возврат объекта
        Material[] mats = meshRenderer.materials;

        cut_off = 1f - (speed * t);

        mats[0].SetFloat("_Cutoff", cut_off);
        t += Time.deltaTime;

        meshRenderer.materials = mats;
    }

    IEnumerator CoolDown(){
        if(end == true){
            yield return new WaitForSeconds(waitEmpty);
            wait = false;
        }

        if(end == false){
            yield return new WaitForSeconds(waitNotDissolved);
            wait = false;
        }
    }
}

  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы