需要一个循环的帮助 [英] Need help with a loop
本文介绍了需要一个循环的帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
喂! 。我需要帮助编码一些东西
我正在读一个有道路的游戏文件,道路是4个顶点的部分
所以我正在做的是一次读8并建立一个部分
Hey! . I need help coding something
I'm reading a game file with roads, and the roads are in sections of 4 vertices
So what I am doing is reading 8 at a time and building a section
if (type == 0) {
//Road
UInt16 sections = Convert.ToUInt16 (subtype);
if (subtype == 0) {
sections = r.ReadUInt16();
}
//Debug.Log ("Road with " + sections + " sections [block " + i + "]");
bool invalid = false;
if(sections == 1 || sections % 2 > 0){
Debug.Log ("INVALID ROAD" + sections );
invalid = true;
}
Debug.Log ("Road with sections : " + sections);
if(invalid || !invalid){
goto skipRead; //road reading f***ed I'll do it later
}
//sections /= 2; //Read and build 2 sections at a time
Debug.Log ("New sections " +sections);
List<Vector3> secVerts = new List<Vector3>();
for(int j = 1; j <= sections ; j++){
Vector3 v1 = vertexes[r.ReadUInt16 ()]; //Outer sidewalk vertex
Vector3 v2 = vertexes[r.ReadUInt16 ()]; //Outer road vertex
Vector3 v3 = vertexes[r.ReadUInt16 ()]; //Inner road vertex
Vector3 v4 = vertexes[r.ReadUInt16 ()]; //Inner sidewalk vertex
secVerts.Add (v1);
secVerts.Add (v2);
secVerts.Add (v3);
secVerts.Add (v4);
}
for (int j = 0; j < sections ; j += 2) {
Mesh m = new Mesh();
List<Vector3> rdvertexes = new List<Vector3 >();
List<Vector2> rduvs = new List<Vector2 >();
// Vector3 v1 = vertexes[r.ReadUInt16 ()]; //Outer sidewalk vertex
// Vector3 v2 = vertexes[r.ReadUInt16 ()]; //Outer road vertex
// Vector3 v3 = vertexes[r.ReadUInt16 ()]; //Inner road vertex
// Vector3 v4 = vertexes[r.ReadUInt16 ()]; //Inner sidewalk vertex
// Vector3 v5 = vertexes[r.ReadUInt16 ()]; //Same as above 4
// Vector3 v6 = vertexes[r.ReadUInt16 ()];
// Vector3 v7 = vertexes[r.ReadUInt16 ()];
// Vector3 v8 = vertexes[r.ReadUInt16 ()];
Vector3 v1 = secVerts[j];
Vector3 v2 = secVerts[j + 1];
Vector3 v3 = secVerts[j + 2];
Vector3 v4 = secVerts[j + 3];
Vector3 v5 = secVerts[j + 4];
Vector3 v6 = secVerts[j + 5];
Vector3 v7 = secVerts[j + 6];
Vector3 v8 = secVerts[j + 7];
//First sidewalk face
rdvertexes.Add (v1);
rdvertexes.Add (v5);
rdvertexes.Add (new Vector3(v6.x,v5.y,v6.z));
rdvertexes.Add (new Vector3(v2.x,v1.y,v2.z));
rduvs.Add (new Vector2(1,0));
rduvs.Add (new Vector2(0,0));
rduvs.Add (new Vector2(0,1));
rduvs.Add (new Vector2(1,1));
//First Sidewalk side face 4 5 6 7
rdvertexes.Add (new Vector3(v6.x,v5.y,v6.z));
rdvertexes.Add (new Vector3(v2.x,v1.y,v2.z));
rdvertexes.Add (v2);
rdvertexes.Add (v6);
rduvs.Add (new Vector2(0,1));
rduvs.Add (new Vector2(0,0));
rduvs.Add (new Vector2(1,0));
rduvs.Add (new Vector2(1,1));
//Road Face 8 9 10 11
rdvertexes.Add (v2); // bottom left
rdvertexes.Add (v6); //top left
rdvertexes.Add (v7); // top right
rdvertexes.Add (v3); // bottom right
/*
rduvs.Add (new Vector2(0,1));
rduvs.Add (new Vector2(0,0));
rduvs.Add (new Vector2(2,0));
rduvs.Add (new Vector2(2,1));
*/
rduvs.Add (new Vector2(1,0));
rduvs.Add (new Vector2(0,0));
rduvs.Add (new Vector2(0,1));
rduvs.Add (new Vector2(1,1));
//Second sidewalk face
rdvertexes.Add (new Vector3(v3.x,v4.y,v3.z)); //Bottom left
rdvertexes.Add (new Vector3(v7.x,v8.y,v7.z)); //Top left
rdvertexes.Add (v8); //Top right
rdvertexes.Add (v4); //Bottom right
rduvs.Add (new Vector2(0,1));
rduvs.Add (new Vector2(0,0));
rduvs.Add (new Vector2(1,0));
rduvs.Add (new Vector2(1,1));
//Second Sidewalk side face
rdvertexes.Add (new Vector3(v6.x,v5.y,v6.z)); //top right
rdvertexes.Add (new Vector3(v2.x,v1.y,v2.z)); //top left
rdvertexes.Add (v2); //bottol left
rdvertexes.Add (v6); //bottom right
rduvs.Add (new Vector2(1,1));
rduvs.Add (new Vector2(0,1));
rduvs.Add (new Vector2(0,0));
rduvs.Add (new Vector2(1,0));
m.vertices = rdvertexes.ToArray ();
m.uv = rduvs.ToArray ();
m.subMeshCount = 2;
m.SetTriangles (new int[]{9,8,11,11,10,9,5,6,7,7,4,5},0);
m.SetTriangles (new int[]{1,0,3,3,2,1,},1);
m.RecalculateNormals ();
GameObject go = new GameObject("Road [" + i + "," + j + "]");
go.AddComponent<MeshRenderer>();
go.AddComponent<MeshFilter>();
go.GetComponent<MeshFilter>().mesh = m;
}
//m.SetTriangles (new int[]{7,6,5,5,4,7},0);
goto doneRead;
skipRead:;
r.ReadBytes(sections * 8);
doneRead:;
} else if (type == 1) {
//Sidewalk Strip
Int16 sections = subtype;
if (subtype == 0) {
sections = r.ReadInt16();
}
sections *= 2;
for (int j = 1; j <= sections; j++) {
r.ReadInt16 ();
}
//r.ReadBytes(sections * 4)
} else if (type == 2) {
//Road walkkway thing
Int16 sections = subtype;
if (subtype == 0) {
sections = r.ReadInt16();
}
goto skipRead;
//Debug.Log ("Road with " + sections + " sections [block " + i + "]");
sections /= 2; //Read and build 2 sections at a time
Debug.Log ("New sections " +sections);
Mesh m = new Mesh();
List<Vector3> rdvertexes = new List<Vector3 >();
List<Vector2> rduvs = new List<Vector2 >();
for (int j = 1; j <= sections; j++) {
Vector3 v1 = vertexes[r.ReadInt16 ()]; //Outer sidewalk vertex
Vector3 v2 = vertexes[r.ReadInt16 ()]; //Outer road vertex
Vector3 v3 = vertexes[r.ReadInt16 ()]; //Inner road vertex
Vector3 v4 = vertexes[r.ReadInt16 ()]; //Inner sidewalk vertex
//one face
rdvertexes.Add (v1);
rdvertexes.Add (v2);
rdvertexes.Add (v3);
rdvertexes.Add (v4);
rduvs.Add (new Vector2(1,0));
rduvs.Add (new Vector2(0,0));
rduvs.Add (new Vector2(0,1));
rduvs.Add (new Vector2(1,1));
m.vertices = rdvertexes.ToArray ();
m.uv = rduvs.ToArray ();
m.subMeshCount = 1;
m.RecalculateNormals ();
m.SetTriangles (new int[]{0,1,2,2,1,0},0);
}
//m.SetTriangles (new int[]{7,6,5,5,4,7},0);
GameObject go = new GameObject("Walkway");
go.AddComponent<MeshRenderer>();
go.AddComponent<MeshFilter>();
go.GetComponent<MeshFilter>().mesh = m;
goto doneRead;
skipRead:;
r.ReadBytes(sections * 8);
doneRead:;
}
但是当我读到一些不是2的倍数:/
基本上我想知道的是如何制作循环以便计算机执行此操作
Build第0节到第1节,构建第1节到第2节,构建第2节到第3节完成。但它没有这样做:/
But it is encountering an issue when I read something that isn't a multiple of 2 :/
Basically what I want to know is how would I make the loop so the computer does this
"Build section 0 to 1, build section 1 to 2, build section 2 to 3" done. But It's not doing that :/
推荐答案
这篇关于需要一个循环的帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文