public pb_SerializableObject(pb_Object pb) { this.vertices = pb.vertices; // Make sure the mesh is valid, and in sync with current pb_Object if(pb.msh == null || pb.msh.vertexCount != pb.vertexCount) { pb_UpgradeKitUtils.RebuildMesh(pb); } this.uv = pb.msh != null ? pb.msh.uv : null; if(pb.msh != null && pb.msh.colors != null && pb.msh.colors.Length == pb.vertexCount) { this.color = pb.msh.colors; } else { this.color = new Color[pb.vertexCount]; for(int i = 0; i < this.color.Length; i++) this.color[i] = Color.white; } this.faces = pb.faces; this.sharedIndices = (int[][])pb.GetSharedIndices().ToArray(); PropertyInfo prop_uv = pb.GetType().GetProperty("sharedIndicesUV", BindingFlags.Instance | BindingFlags.Public); if(prop_uv != null) { var val = prop_uv.GetValue(pb, null); if(val != null) { pb_IntArray[] sharedUvs = (pb_IntArray[])val; this.sharedIndicesUV = (int[][])sharedUvs.ToArray(); } else { this.sharedIndicesUV = new int[0][]; } } else { this.sharedIndicesUV = new int[0][]; } PropertyInfo prop_userCollisions = pb.GetType().GetProperty("userCollisions", BindingFlags.Instance | BindingFlags.Public); userCollisions = prop_userCollisions == null ? false : (bool) prop_userCollisions.GetValue(pb, null); }