private void Start() { if (fallbackLevelMaterial == null) { Debug.LogError("Fallback Level Material CAN NOT BE NULL!"); return; } foreach (Transform child in transform) { GameObject go = child.gameObject; ProBuilderMesh mainMesh = go.GetComponent <ProBuilderMesh>(); ArrayPacker[] faces = new ArrayPacker[mainMesh.faces.Count]; for (int i = 0; i < faces.Length; i++) { int[] faceVerts = new int[mainMesh.faces[i].indexes.Count]; mainMesh.faces[i].indexes.CopyTo(faceVerts, 0); faces[i] = new ArrayPacker(faceVerts); } Vector3[] vertices = new Vector3[mainMesh.positions.Count]; for (int i = 0; i < mainMesh.positions.Count; i++) { vertices[i] = mainMesh.positions[i]; } ArrayPacker[] sharedVertices = new ArrayPacker[mainMesh.sharedVertices.Count]; for (int i = 0; i < mainMesh.sharedVertices.Count; i++) { int[] sharedVertex = new int[mainMesh.sharedVertices[i].Count]; mainMesh.sharedVertices[i].CopyTo(sharedVertex, 0); sharedVertices[i] = new ArrayPacker(sharedVertex); } LevelPiece piece = new LevelPiece(go.transform.position, go.transform.rotation, vertices, faces, sharedVertices); Renderer renderer = go.GetComponent <Renderer>(); MaterialMapping mapping = MaterialMapping.GetMaterialMappingFromMaterial(levelMaterials, renderer.sharedMaterial); if (mapping != null) { piece.materialName = mapping.materialName; } else { piece.materialName = Constants.ERROR_NO_MATERIAL; } levelPieces.Add(piece); } // Was for testing to see duplicated data if (isTesting) { StartCoroutine(spawnBack()); } }
/// <summary>Adds an ArrayPacker to the packet.</summary> /// <param name="_value">The ArrayPacker to add.</param> public void Write(ArrayPacker _value) { Write(_value.length); foreach (int value in _value.array) { Write(value); } }