static public GameObject DuplicateObjectForPrefab(GameObject from)
    {
        GameObject newobj = null;

        if (from)
        {
            newobj = (GameObject)GameObject.Instantiate(from);

            if (newobj)
            {
                MegaModifyObject[] mobjs = newobj.GetComponentsInChildren <MegaModifyObject>();
                //MeshFilter[] mfil = newobj.GetComponentsInChildren<MeshFilter>();

                for (int i = 0; i < mobjs.Length; i++)
                {
                    Mesh m = MegaModifyObject.FindMesh(mobjs[i].gameObject);
                    if (m)
                    {
                        Mesh newmesh = DupMesh(m, mobjs[i]);
                        MegaModifyObject.SetMeshNew(mobjs[i].gameObject, newmesh);
                    }
                }

                //for ( int i = 0; i < mfil.Length; i++ )
                //mfil[i].sharedMesh = DupMesh(mfil[i].sharedMesh, mobjs[i]);

                //SkinnedMeshRenderer[] skin = newobj.GetComponentsInChildren<SkinnedMeshRenderer>();

                //for ( int i = 0; i < skin.Length; i++ )
                //skin[i].sharedMesh = DupMesh(skin[i].sharedMesh, mobjs[i]);

                for (int i = 0; i < mobjs.Length; i++)
                {
                    mobjs[i].MeshUpdated();
                }

                MegaModifier[] frommods = from.GetComponentsInChildren <MegaModifier>();
                MegaModifier[] tomods   = newobj.GetComponentsInChildren <MegaModifier>();

                for (int i = 0; i < frommods.Length; i++)
                {
                    tomods[i].PostCopy(frommods[i]);
                }

                MegaWrap[] wraps = newobj.GetComponentsInChildren <MegaWrap>();

                for (int i = 0; i < wraps.Length; i++)
                {
                    wraps[i].SetMesh();
                }

                newobj.name = from.name;                        // + " - Copy";
            }
        }

        return(newobj);
    }