TEXTFILE I / O:不要写同样的东西

时间:2014-07-04 09:39:14

标签: unity3d .net unityscript

我有一个存储该块的坐标和名称的函数,但问题是每次生成新块时都会调用此函数,但如果它们不远,旧函数将继续加载。因此结果是在文本文件中,函数有时会写入块2次。 我不希望这种情况发生,并且该函数只能写入每个块一次。 主要问题是我无法同时使用StreamwWriter和StreamReader。

这是我的代码:

function saveLoadedChunk() {
    var loadedChunks : GameObject[] = FindObjectsOfType(GameObject) as GameObject[];
    var fileName = "C:/Reactor Games/chunks.txt";
    var sw : System.IO.StreamWriter = new System.IO.StreamWriter(fileName, true);
    for (var i = 0; i < loadedChunks.length ; i++) {
        if(loadedChunks[i].name.Substring(0,5) == "Chunk" || loadedChunks[i].name.Substring(0,5) == "_TERR") {
            if(loadedChunks[i].tag != "Player") {
                var xco = loadedChunks[i].transform.position.x;
                var yco = loadedChunks[i].transform.position.y;
                var zco = loadedChunks[i].transform.position.z;
                var stringToWrite = "Chunk (" + xco + ", " + yco + ", " + zco + ")";
                sw.WriteLine(stringToWrite);
            }
        }
    }
    sw.Flush();
    sw.Close();
}

1 个答案:

答案 0 :(得分:0)

序言

我主要使用C#,因此语法可能会有一些错误。

解决方案

您可以将所有块存储在内存集中。在saveLoadedChunk中,您将更新此集,然后将其内容写入文件:

var chunks: HashSet<Vector3> = new HashSet<Vector3>();

function saveLoadedChunk() {
    var loadedChunks : GameObject[] = FindObjectsOfType(GameObject) as GameObject[];
    for (var i = 0; i < loadedChunks.length ; i++)
        if(loadedChunks[i].name.Substring(0,5) == "Chunk" || loadedChunks[i].name.Substring(0,5) == "_TERR")
            if(loadedChunks[i].tag != "Player")
                chunks.Add(loadedChunks[i].transform.position);
    var fileName = "C:/Reactor Games/chunks.txt";
    var sw : System.IO.StreamWriter = new System.IO.StreamWriter(fileName, false);
    for (var chunk: Vector3 in chunks) {
        var stringToWrite = "Chunk (" + chunk.x + ", " + chunk.y + ", " + chunk.z + ")";
        sw.WriteLine(stringToWrite);
    }
}

这里的缺点是:

  1. 每次启动应用时,您都会设置空白chunks
  2. 您将所有块的坐标存储在内存中。但是,除非你真的有很多块,否则我不会说这是一个缺点。
  3. 为了解决第一个问题,您需要在应用启动后使用存储在chunks中的corrds填充C:/Reactor Games/chunks.txt