/// <summary> /// 创建所有的片 /// </summary> private void CreatePieces() { GameObject piece_root = new GameObject("chunk_" + id_x + "_" + id_y); obj = piece_root; for (int i = 0; i < m_mesh_piece_num; i++) { for (int j = 0; j < m_mesh_piece_num; j++) { LodPiece piece = m_piecees[j, i]; GameObject obj = MeshCreator.DrawMesh(piece.vers, piece.nors, piece.uvs, piece.indexes, m_chunk_mat, "piece_" + j + "_" + i); piece.mesh = obj.GetComponent <MeshFilter>().mesh; obj.AddComponent <MeshCollider>(); obj.transform.SetParent(piece_root.transform); } } piece_root.transform.SetParent(ChunkManager.Instence.transform); }
private GameObject CreatePiece(LodPiece piece, string name) { int each_offset = 1 << piece.LodLevel; int segment = PieceMechSegment / each_offset; int ver_num = (segment + 1) * (segment + 1); bool[] isLevelBiger = new bool[] { false, false, false, false }; Vector3[] vers = new Vector3[ver_num]; Vector3[] nors = new Vector3[ver_num]; Vector2[] uvs = new Vector2[ver_num]; int[] indexes = new int[segment * segment * 6]; UpdatePieceLod(vers, nors, uvs, indexes, segment, piece, isLevelBiger); GameObject obj = MeshCreator.DrawMesh(vers, nors, uvs, indexes, PieceMat, name); piece.mesh = obj.GetComponent <MeshFilter>().mesh; piece.vers = vers; piece.nors = nors; piece.uvs = uvs; piece.indexes = indexes; piece.last_lod_level = piece.LodLevel; piece.last_is_biger_level = isLevelBiger; obj.AddComponent <MeshCollider>(); return(obj); }