Unity3D中的循环功能(0 + 1 = 2)?

时间:2016-07-05 18:11:26

标签: c# loops unity3d

我可能有点麻烦我假设只是一个简单的 错误,但我找不到更好的解决方案错误, 现在我要做的是通过循环加载我的文件夹中的所有文件,直到达到最大数量

IEnumerator loadData()
{
    Debug.Log (loadNum);
    if (File.Exists (Application.persistentDataPath + "/data[" + loadNum + "].octa")) {
        BinaryFormatter loadData = new BinaryFormatter ();
        FileStream dataFile = File.Open (Application.persistentDataPath + "/data[" + loadNum + "].octa", FileMode.Open);
        playerData pData = (playerData)loadData.Deserialize (dataFile);
        dataFile.Close ();

        name_O = pData.name;
        job_O = pData.job;
        difficulty_O = pData.difficulty;

        rawAPD = name_O + "/" + job_O.ToString() + "/" + difficulty_O.ToString();
        APD = new string[loadNum += 1];

        for (var i = 0; i <= loadNum && i < loadNum; i++) 
        {
            if (APD [i] == null)
            {
                APD [i] = rawAPD;
            }

            break;
        }

        yield return new WaitForSeconds (1);
        if (loadNum != numOfSaveFile_O) 
        {
            Debug.Log ("meh");
            loadNum += 1;
            reLoop ();
        }
    }
    else 
    {
        if (loadNum != numOfSaveFile_O) 
        {
            loadNum += 1;
            reLoop ();  
        }
    }
}

void reLoop()
{
    StartCoroutine (loadData ());
}

现在一切都在收益之后如预期的那样运作良好 数字从0跳到2 这里的场景是我的持久数据路径中有data[0]data[1]文件

Problem

2 个答案:

答案 0 :(得分:1)

  

我想做的是通过循环加载我的文件夹中的所有文件,直到   达到的最大数量。

您的代码看起来并不擅长。很多内存分配和不必要的重复协程函数调用。只需使用System.IO.Directory.GetFiles()获取目录中文件的所有路径,然后将其存储在数组中。

我不知道APD是什么,但是从你正在做的事情来看,你必须使用在for循环之前返回的项目数System.IO.Directory.GetFiles()来初始化大小。

然后,您可以使用for循环遍历数组并读取文件。只需调用以下功能一次。

IEnumerator loadData()
{
    string fileDir = Application.persistentDataPath;

    //Get All Files Path in in the Directory
    string[] filePath = System.IO.Directory.GetFiles(fileDir);

    //Initialize APD with the number of items in filePath
    APD = new string[filePath.Length];

    //Loop through them and read what's in there
    for (int i = 0; i < filePath.Length; i++)
    {
        if ((i + 1) % 5 == 0)
        {
            yield return null;// Wait every after 5 file read
        }

        BinaryFormatter loadData = new BinaryFormatter();
        FileStream dataFile = File.Open(filePath[i], FileMode.Open); //Open File
        playerData pData = (playerData)loadData.Deserialize(dataFile);
        dataFile.Close();

        name_O = pData.name;
        job_O = pData.job;
        difficulty_O = pData.difficulty;

        rawAPD = name_O + "/" + job_O.ToString() + "/" + difficulty_O.ToString();
        APD[i] = rawAPD;
    }
}

如果您只想阅读1numOfSaveFile_O的{​​{1}}扩展名的文件而不是文件夹中的所有文件,那么下面是您的代码应该是什么样子。这假定您的文件的名称类似于.octadata[0].octadata[1].octadata[2].octa ....

data[3].octa

答案 1 :(得分:0)

从评论来看,这似乎是你所需要的;改变这个:

APD = new string[loadNum += 1];

到此:

APD = new string[loadNum + 1];