【问题标题】:Unity3D file I/O StreamWriter text fileUnity3D 文件 I/O StreamWriter 文本文件
【发布时间】:2014-08-25 03:12:15
【问题描述】:

当我的脚本运行start() 函数时,该函数调用saveLoadedChunk() 函数,该函数调用writeChunks() 函数,我在文本文件中看到的只是Chunk(0,0,0)

需要发生的是,在文本文件中,每个块都用他的坐标写入(但只有一次)。我写了以下脚本,但它只写(就像我之前说的)Chunk(0,0,0)

有没有人可以调整此代码或给我一些帮助,以便脚本写入文件中的所有块,但只有 1 次。

非常感谢您的帮助。

部分脚本

function saveLoadedChunk() {
    var loadedChunks : GameObject[] = FindObjectsOfType(GameObject) as GameObject[];
    var fileName = "C:/Reactor Games/chunks.txt";
    for (var i = 0; i < loadedChunks.length ; i++) {
            if(loadedChunks[i].name.Substring(0,5) == "Chunk") {
                if(loadedChunks[i].tag == "Player") {
                }else{
                    if(System.IO.File.Exists(fileName)) {
                        Debug.Log("EXIST");
                        var xco1 = loadedChunks[i].transform.position.x;
                        var yco1 = loadedChunks[i].transform.position.y;
                        var zco1 = loadedChunks[i].transform.position.z;
                        writeChunks(fileName, xco1, yco1, zco1);
                    }else{
                        Debug.Log("NOTEXIST");
                        var sr = System.IO.File.CreateText(fileName);
                        var xco2 = loadedChunks[i].transform.position.x;
                        var yco2 = loadedChunks[i].transform.position.y;
                        var zco2 = loadedChunks[i].transform.position.z;
                        writeChunks(fileName, xco2, yco2, zco2);
                    }   
            }
        }
    }

}

function writeChunks(fileName : String, xco : int, yco : int, zco : int) {
    var stringToWrite = "Chunk (" + xco + ", " + yco + ", " + zco + ")";
    Debug.Log(stringToWrite);
    var sw : System.IO.StreamWriter = new System.IO.StreamWriter(fileName);
    sw.WriteLine(stringToWrite);
    sw.Flush();
    sw.Close();
}

【问题讨论】:

  • 这是 unityscript,不是 javascript

标签: unity3d .net unityscript


【解决方案1】:

在 else 分支中,输出文件被创建并保持打开状态,因此第一次调用 writeChunks 无法写入,因为它无法打开文件:

}else{
  Debug.Log("NOTEXIST");
  var sr = System.IO.File.CreateText(fileName); // This line opens the file and 
                                                // is unnecessary because the
                                                // StreamWriter in writeChunks will 
                                                // create the file if it does not 
                                                // already exist. Remove this line.
                                                // This entire else branch actually
                                                // is redundant and may be removed.
  var xco2 = loadedChunks[i].transform.position.x;
  var yco2 = loadedChunks[i].transform.position.y;
  var zco2 = loadedChunks[i].transform.position.z;
  writeChunks(fileName, xco2, yco2, zco2);
}

这只会影响第一次写入,但是,在 writeChunks 中,您每次都会覆盖文件的内容,而不是追加文件。 StreamWriter 类可选地接受第二个布尔参数,它允许您打开文件并附加到它:

var sw : System.IO.StreamWriter = new System.IO.StreamWriter(fileName, true);

您可能还希望考虑重构您的代码,这样您就不会像以下那样经常打开和关闭文件:

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);
    for (var i = 0; i < loadedChunks.length ; i++) {
        if(loadedChunks[i].name.Substring(0,5) == "Chunk") {
            if(loadedChunks[i].tag != "Player") {
                var xco1 = loadedChunks[i].transform.position.x;
                var yco1 = loadedChunks[i].transform.position.y;
                var zco1 = loadedChunks[i].transform.position.z;
                writeChunks(sw, xco1, yco1, zco1);
            }
        }
    }
    sw.Flush();
    sw.Close();
}

function writeChunks(sw : System.IO.StreamWriter, xco : int, yco : int, zco : int) {
    var stringToWrite = "Chunk (" + xco + ", " + yco + ", " + zco + ")";
    Debug.Log(stringToWrite);
    sw.WriteLine(stringToWrite);
}

【讨论】:

  • 感谢您的回答。在接下来的 10 小时内,我无法对此进行测试,但非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2010-12-25
  • 2014-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多