Beispiel #1
0
	GameObject[] CreateSubMeshes(MapData data, int patchSize, float size, float yOffset, out MeshCollider[] clds)
	{
		int xCount, zCount;
		if (data.xCount < patchSize)
		{
			this.patchSize = data.xCount;
			xCount = 1;
			zCount = 1;
		}
		else
		{
			this.patchSize = patchSize;
			xCount = data.xCount / patchSize;
			zCount = data.zCount / patchSize;
		}

		int count = xCount * zCount;
		GameObject[] result = new GameObject[count];
		clds = new MeshCollider[count];
		int i = 0;

		Vector3 meshOffset = GetOffset() + new Vector3(0, yOffset, 0);
		for (int z = 0; z < zCount; z++)
		{
			for (int x = 0; x < xCount; x++)
			{
				Mesh subMesh = CreateSubMesh(data, x * patchSize, z * patchSize, patchSize, patchSize, size, meshOffset);
				GameObject obj = new GameObject();
				obj.name = string.Format("subMesh_{0}_{1}", x, z);
				MeshFilter meshFilter = obj.AddComponent<MeshFilter>();
				meshFilter.mesh = subMesh;
				meshFilter.sharedMesh.UploadMeshData(false);
				MeshRenderer rd = obj.AddComponent<MeshRenderer>();
				rd.material = lineMaterial;

				GameObject cldObj = new GameObject(obj.name + "_cld");
				cldObj.transform.parent = obj.transform;
				MeshCollider cld = cldObj.AddComponent<MeshCollider>();
				Mesh mesh = GridmeshCreator.CreateGridMesh(patchSize, patchSize, new Vector3(x * patchSize, 0, z * patchSize) + GetOffset(), patchSize, patchSize);
				GridmeshCreator.SetHeight(mesh, data.GetEdgeHeights(x * patchSize, z * patchSize, patchSize, patchSize));

				cld.sharedMesh = mesh;

				cld.sharedMesh.UploadMeshData(false);


				clds[i] = cld;
				result[i] = obj;

				i++;
			}
		}

		return result;
	}