【发布时间】:2014-08-26 00:43:14
【问题描述】:
我有一个 for 循环,它获取场景中的所有“块”并获取它们的 X、Y 和 Z 坐标,然后将这些坐标加上它的名称写入文本文件。它对所有块执行此操作。这个 for 循环位于一个名为 saveLoadedChunk 的函数中。此函数每分钟调用一次以保存块。但问题是,当玩家站在与 10 分钟前相同的区域时,它会保存相同的块并生成包含所有块的文本文件,但会多次。我不希望这种情况发生,所以编写了一小段代码,将文本文件的所有块放在一个数组中,并将它们与要保存的块进行比较。如果是这样,它将不会再次保存该块。但在添加一些 Debug.Log(); 后它不起作用函数,我发现第 20 行的 if 语句总是采用 else 分支。我不知道为什么,感谢所有帮助。
非常感谢,
代码:
function saveLoadedChunk() {
var loadedChunks : GameObject[] = FindObjectsOfType(GameObject) as GameObject[];
var fileName = "C:/Reactor Games/chunks.txt";
var fileText = System.IO.File.ReadAllText(fileName);
var lines = fileText.Split("\n"[0]);
var dontWrite = false;
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 + ")";
for(var chunkName in lines) {
if(chunkName.Equals(stringToWrite)) {
Debug.LogError("dontwrite = true");
dontWrite = true;
}
else{
dontWrite = false;
}
}
if(!dontWrite){sw.WriteLine(stringToWrite);}
}
}
}
sw.Flush();
sw.Close();
}
文本文件示例(应该是这样的,没有块被写两次):
Chunk (100, 0, -100)
Chunk (100, 0, -50)
Chunk (100, 0, 0)
Chunk (100, 0, 50)
Chunk (100, 0, 100)
Chunk (50, 0, -100)
Chunk (50, 0, 100)
Chunk (0, 0, -100)
Chunk (0, 0, 100)
Chunk (-50, 0, -100)
Chunk (-50, 0, 100)
Chunk (-100, 0, -100)
Chunk (-100, 0, -50)
Chunk (-100, 0, 0)
Chunk (-100, 0, 50)
Chunk (-100, 0, 100)
Chunk (0, 0, -50)
Chunk (0, 0, 50)
Chunk (-50, 0, -50)
Chunk (-50, 0, 0)
Chunk (-50, 0, 50)
Chunk (50, 0, -50)
Chunk (50, 0, 0)
Chunk (50, 0, 50)
Chunk (0, 0, 0)
错误的文本文件示例: 正如您在下面的文本文件中看到的那样,您可以看到它一遍又一遍地写入相同的块,每次 saveLoadedChunk();函数被调用。
Chunk (0, 0, -100)
Chunk (0, 0, 100)
Chunk (-50, 0, -100)
Chunk (-50, 0, 100)
Chunk (-100, 0, -100)
Chunk (-100, 0, -50)
Chunk (-100, 0, 0)
Chunk (-100, 0, 50)
Chunk (-100, 0, 100)
Chunk (0, 0, -50)
Chunk (0, 0, 50)
Chunk (-50, 0, -50)
Chunk (-50, 0, 0)
Chunk (-50, 0, 50)
Chunk (50, 0, -50)
Chunk (50, 0, 0)
Chunk (50, 0, 50)
Chunk (0, 0, 0)
Chunk (100, 0, -100)
Chunk (100, 0, -50)
Chunk (100, 0, 0)
Chunk (100, 0, 50)
Chunk (100, 0, 100)
Chunk (50, 0, -100)
Chunk (50, 0, 100)
Chunk (0, 0, -100)
Chunk (0, 0, 100)
Chunk (-50, 0, -100)
Chunk (-50, 0, 100)
Chunk (-100, 0, -100)
Chunk (-100, 0, -50)
Chunk (-100, 0, 0)
Chunk (-100, 0, 50)
Chunk (-100, 0, 100)
Chunk (0, 0, -50)
Chunk (0, 0, 50)
Chunk (-50, 0, -50)
Chunk (-50, 0, 0)
Chunk (-50, 0, 50)
Chunk (50, 0, -50)
Chunk (50, 0, 0)
Chunk (50, 0, 50)
Chunk (0, 0, 0)
Chunk (100, 0, -100)
Chunk (100, 0, -50)
Chunk (100, 0, 0)
Chunk (100, 0, 50)
Chunk (100, 0, 100)
Chunk (50, 0, -100)
Chunk (50, 0, 100)
Chunk (0, 0, -100)
Chunk (0, 0, 100)
Chunk (-50, 0, -100)
Chunk (-50, 0, 100)
Chunk (-100, 0, -100)
Chunk (-100, 0, -50)
Chunk (-100, 0, 0)
Chunk (-100, 0, 50)
Chunk (-100, 0, 100)
Chunk (0, 0, -50)
Chunk (0, 0, 50)
Chunk (-50, 0, -50)
Chunk (-50, 0, 0)
Chunk (-50, 0, 50)
Chunk (50, 0, -50)
Chunk (50, 0, 0)
Chunk (50, 0, 50)
Chunk (0, 0, 0)
Chunk (100, 0, -100)
Chunk (100, 0, -50)
Chunk (100, 0, 0)
Chunk (100, 0, 50)
Chunk (100, 0, 100)
Chunk (50, 0, -100)
Chunk (50, 0, 100)
Chunk (0, 0, -100)
Chunk (0, 0, 100)
Chunk (-50, 0, -100)
Chunk (-50, 0, 100)
Chunk (-100, 0, -100)
Chunk (-100, 0, -50)
Chunk (-100, 0, 0)
Chunk (-100, 0, 50)
Chunk (-100, 0, 100)
Chunk (0, 0, -50)
Chunk (0, 0, 50)
Chunk (-50, 0, -50)
Chunk (-50, 0, 0)
Chunk (-50, 0, 50)
Chunk (50, 0, -50)
Chunk (50, 0, 0)
Chunk (50, 0, 50)
Chunk (0, 0, 0)
Chunk (100, 0, -100)
Chunk (100, 0, -50)
Chunk (100, 0, 0)
Chunk (100, 0, 50)
Chunk (100, 0, 100)
Chunk (50, 0, -100)
Chunk (50, 0, 100)
Chunk (0, 0, -100)
Chunk (0, 0, 100)
Chunk (-50, 0, -100)
Chunk (-50, 0, 100)
Chunk (-100, 0, -100)
Chunk (-100, 0, -50)
Chunk (-100, 0, 0)
Chunk (-100, 0, 50)
Chunk (-100, 0, 100)
Chunk (0, 0, -50)
Chunk (0, 0, 50)
Chunk (-50, 0, -50)
Chunk (-50, 0, 0)
Chunk (-50, 0, 50)
Chunk (50, 0, -50)
Chunk (50, 0, 0)
Chunk (50, 0, 50)
Chunk (0, 0, 0)
更新 1: 感谢罗伯特,我将代码更改为以下代码。但是由于某种原因它仍然无法调试 dontwrite... 非常感谢您的帮助,我会在它有效时接受答案 + 我对每一个对我有帮助的答案都投赞成票。
function saveLoadedChunk() {
var loadedChunks : GameObject[] = FindObjectsOfType(GameObject) as GameObject[];
var fileName = "C:/Reactor Games/chunks.txt";
var fileText = System.IO.File.ReadAllText(fileName);
var lines = fileText.Split("\n"[0]);
var write = true;
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" || loadedChunks[i].name.Substring(0,5) == "_ACTI") {
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 + ")";
write = true;
for(var chunkName in lines) {
if(chunkName.Equals(stringToWrite)) {
Debug.LogError("dontwrite = true");
write = false;
break;
}
}
if(write){sw.WriteLine(stringToWrite);}
}
}
}
sw.Flush();
sw.Close();
}
【问题讨论】:
-
对于同一个问题在这里多问几个问题可不是什么好事。
标签: arrays unity3d .net unityscript