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);
        }