Yura111
@Yura111

Как избавиться от бесконечного цикла?

Всем привет! Я делаю проверку на совпадение в файле json и если нахожу то он должен запустить карутину Skin в ней идет проверка на число и запускается ItNUM где и идет проверка . А если совпадений нет , то запускаем другую карутину которая добавляет число в json , но у меня начинается бесконечный цикл при совпадение
и еще в проверке начинают работать все условия которые есть и все зависает

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


public class CharectorChans : MonoBehaviour
{
   
    private string path;

    

    public int i = 0;
    public int Rand;
    public int Num;

    public Transform pos ;

    public Sprite[] Charectors;

    private Save sv = new Save();
    
    

    
    void Start()
    {
        

#if UNITY_ANDROID && !UNITY_EDITOR
        path = Path.Combine(Application.persistentDataPath, "Save.json");
#else
        path = Path.Combine(Application.dataPath, "Save.json"); // путь файла
#endif

        if (File.Exists(path))//если файл есть
        {
            sv = JsonUtility.FromJson<Save>(File.ReadAllText(path)); // присваеваем 
            
            Debug.Log("присвоили");
        }
        else
        {

        }
        
        StartCoroutine(Skin());
    }



#if UNITY_ANDROID && !UNITY_EDITOR
        private void OnApplicationPause(bool pause){
            if(paise) File.WriteAllText(path, JsonUtility.ToJson(sv));
        }
#endif


    private void OnApplicationQuit()
    {
        File.WriteAllText(path, JsonUtility.ToJson(sv));
        Debug.Log("сохранили");
    }

    void Update()
    {
        File.WriteAllText(path, JsonUtility.ToJson(sv));

    }
    
    IEnumerator Skin(){ // узнаю какое число выполо
        yield return new WaitForSeconds(0.1f);
        Rand = UnityEngine.Random.Range(1, 85);
        if (Rand <= 30 ){
            this.GetComponent<SpriteRenderer>().sprite = Charectors[Num = 0];
            ItNUM();
        }
        else if(Rand >= 31 && Rand <= 55)
        {
            this.GetComponent<SpriteRenderer>().sprite = Charectors[Num = UnityEngine.Random.Range(1,5)];
            ItNUM();
        }
        else if(Rand >= 56 && Rand <= 70)
        {
            this.GetComponent<SpriteRenderer>().sprite = Charectors[Num = UnityEngine.Random.Range(6,7)];
            ItNUM();
        }
        else if(Rand >= 71 && Rand <= 80)
        {
            this.GetComponent<SpriteRenderer>().sprite = Charectors[Num = UnityEngine.Random.Range(8,9)];
            ItNUM();
        }
        else if(Rand >= 81 && Rand <= 85)
        {
            this.GetComponent<SpriteRenderer>().sprite = Charectors[Num = UnityEngine.Random.Range(10,11)];
            ItNUM();
        }
        
    }
    IEnumerator Wait1()
    {
        yield return new WaitForSeconds(1f);
        sv.ItsNum.Add(Num);
    }
    

    

    [Serializable]
    public class Save
    {
        public List<int> ItsNum = new List<int>();
    }


    public void ItNUM() //здесь идет проверка на json
    {
        
        Debug.Log("Робит");
        
        foreach (int item in sv.ItsNum)
        {
            Debug.Log(item);
            if(Num == item) 
            {
                
                StartCoroutine(Skin()); // если совпадает
            }
            else
            {
                StartCoroutine(Wait1()); // в ином случае  
            }
            
                
        }
        
    }
}
  • Вопрос задан
  • 30 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы