public void GetMesh(bool force)
    {
        if (mesh == null || cachedMesh == null || sverts.Length == 0 || mesh.vertexCount != sverts.Length || force)
        {
            if (dynamicMesh)
            {
                cachedMesh = FindMesh(gameObject, out sourceObj);
                if (verts != null && verts.Length > 0)
                {
                    cachedMesh.vertices = verts;
                }
                mesh = cachedMesh;
                if (mesh.vertexCount != 0)
                {
                    SetMeshData();
                }
            }
            else
            {
                cachedMesh = FindMesh(gameObject, out sourceObj);
                if (verts != null && verts.Length > 0)
                {
                    cachedMesh.vertices = verts;
                }
                mesh = MegaCopyObject.DupMesh(cachedMesh, "");

                SetMesh(gameObject, mesh);
                if (mesh.vertexCount != 0)
                {
                    SetMeshData();
                }
            }
        }
    }
Ejemplo n.º 2
0
    void Update()
    {
        t += Time.deltaTime;

        if (t > time)
        {
            t -= time;
            Vector3 pos = Vector3.zero;

            pos.x = Random.Range(-range.x, range.x);
            pos.y = Random.Range(-range.y, range.y);
            pos.z = Random.Range(-range.z, range.z);

            GameObject newobj = MegaCopyObject.DeepCopy(spawnobj);
            newobj.transform.position = pos;

            MegaMorph mor = newobj.GetComponent <MegaMorph>();
            if (mor)
            {
                mor.animtime = 0.0f;
            }
        }
    }
Ejemplo n.º 3
0
    static void InstanceModifiedMesh()
    {
        GameObject from = Selection.activeGameObject;

        MegaCopyObject.InstanceObject(from);
    }
Ejemplo n.º 4
0
    static void AllNewCreateSimplePrefab()
    {
        if (Selection.activeGameObject != null)
        {
            if (!Directory.Exists("Assets/MegaPrefabs"))
            {
                AssetDatabase.CreateFolder("Assets", "MegaPrefabs");
            }

            GameObject obj = Selection.activeGameObject;

            // Make a copy?
            GameObject newobj = MegaCopyObject.DoCopyObjects(obj);
            newobj.name = obj.name;

            // Get all modifyObjects in children
            MegaModifyObject[] mods = newobj.GetComponentsInChildren <MegaModifyObject>();

            for (int i = 0; i < mods.Length; i++)
            {
                // Need method to get the base mesh
                GameObject pobj = mods[i].gameObject;

                // Get the mesh and make an asset for it
                Mesh mesh = MegaUtils.GetSharedMesh(pobj);

                if (mesh)
                {
                    string mname = mesh.name;
                    int    ix    = mname.IndexOf("Instance");
                    if (ix != -1)
                    {
                        mname = mname.Remove(ix);
                    }

                    string meshpath = "Assets/MegaPrefabs/" + mname + ".prefab";
                    AssetDatabase.CreateAsset(mesh, meshpath);
                    AssetDatabase.SaveAssets();
                    AssetDatabase.Refresh();
                }
            }

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

            for (int i = 0; i < wraps.Length; i++)
            {
                // Need method to get the base mesh
                GameObject pobj = wraps[i].gameObject;

                // Get the mesh and make an asset for it
                Mesh mesh = MegaUtils.GetSharedMesh(pobj);

                if (mesh)
                {
                    string mname = mesh.name;

                    int ix = mname.IndexOf("Instance");
                    if (ix != -1)
                    {
                        mname = mname.Remove(ix);
                    }

                    string meshpath = "Assets/MegaPrefabs/" + mname + ".prefab";
                    AssetDatabase.CreateAsset(mesh, meshpath);
                    AssetDatabase.SaveAssets();
                    AssetDatabase.Refresh();
                }
            }

            Object prefab = PrefabUtility.CreateEmptyPrefab("Assets/MegaPrefabs/" + newobj.name + "_Prefab.prefab");
            //EditorUtility.ReplacePrefab(newobj, prefab, ReplacePrefabOptions.ConnectToPrefab);
            PrefabUtility.ReplacePrefab(newobj, prefab, ReplacePrefabOptions.ConnectToPrefab);
            DestroyImmediate(newobj);
        }
    }
Ejemplo n.º 5
0
    //[MenuItem("GameObject/Mega Copy Hier")]
    static void DoCopyObjectsHier()
    {
        GameObject from = Selection.activeGameObject;

        MegaCopyObject.DoCopyObjectsChildren(from);
    }
Ejemplo n.º 6
0
    //[MenuItem("GameObject/Mega Copy Object")]
    static void DoCopyObjects()
    {
        GameObject from = Selection.activeGameObject;

        MegaCopyObject.DoCopyObjects(from);
    }
Ejemplo n.º 7
0
    static void DupObject()
    {
        GameObject from = Selection.activeGameObject;

        MegaCopyObject.DuplicateObject(from);
    }
    //[DrawGizmo(GizmoType.SelectedOrChild)]
    //static void RenderGizmoSelected(ModifyObject mod, GizmoType gizmoType)
    //{
    //mod.ColliderTest();
    //}

    public override void OnInspectorGUI()
    {
        MegaModifyObject mod = (MegaModifyObject)target;

        //showhelp = EditorGUILayout.Foldout(showhelp, "Help");

        //if ( showhelp )
        //{
        //if ( image == null )
        //image = (Texture)EditorGUIUtility.LoadRequired("mod_help.png");

        //if ( image != null )
        //{
        //float w = Screen.width - 12.0f;
        //float h = (w / image.width) * image.height;
        //GUILayout.Label((Texture)image, GUIStyle.none, GUILayout.Width(w), GUILayout.Height(h));
        //}
        //}

        EditorGUIUtility.LookLikeInspector();
        MegaModifiers.GlobalDisplay = EditorGUILayout.Toggle("GlobalDisplayGizmos", MegaModifiers.GlobalDisplay);
        mod.Enabled     = EditorGUILayout.Toggle("Enabled", mod.Enabled);
        mod.recalcnorms = EditorGUILayout.Toggle("Recalc Normals", mod.recalcnorms);
        MegaNormalMethod method = mod.NormalMethod;

        mod.NormalMethod   = (MegaNormalMethod)EditorGUILayout.EnumPopup("Normal Method", mod.NormalMethod);
        mod.recalcbounds   = EditorGUILayout.Toggle("Recalc Bounds", mod.recalcbounds);
        mod.recalcCollider = EditorGUILayout.Toggle("Recalc Collider", mod.recalcCollider);
        mod.recalcTangents = EditorGUILayout.Toggle("Recalc Tangents", mod.recalcTangents);
        mod.DoLateUpdate   = EditorGUILayout.Toggle("Do Late Update", mod.DoLateUpdate);
        mod.GrabVerts      = EditorGUILayout.Toggle("Grab Verts", mod.GrabVerts);
        mod.DrawGizmos     = EditorGUILayout.Toggle("Draw Gizmos", mod.DrawGizmos);

        if (mod.NormalMethod != method && mod.NormalMethod == MegaNormalMethod.Mega)
        {
            mod.BuildNormalMapping(mod.mesh, false);
        }

        //showmulti = EditorGUILayout.Foldout(showmulti, "Multi Core");

        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Copy Object"))
        {
            GameObject obj = MegaCopyObject.DoCopyObjects(mod.gameObject);
            if (obj)
            {
                obj.transform.position = mod.gameObject.transform.position;

                Selection.activeGameObject = obj;
            }
        }

        if (GUILayout.Button("Copy Hierarchy"))
        {
            GameObject obj = MegaCopyObject.DoCopyObjectsChildren(mod.gameObject);
            Selection.activeGameObject = obj;
        }

        EditorGUILayout.EndHorizontal();

        if (GUILayout.Button("Threading Options"))
        {
            showmulti = !showmulti;
        }

        if (showmulti)
        {
            MegaModifiers.ThreadingOn = EditorGUILayout.Toggle("Threading Enabled", MegaModifiers.ThreadingOn);
            mod.UseThreading          = EditorGUILayout.Toggle("Thread This Object", mod.UseThreading);
        }

        EditorGUIUtility.LookLikeControls();

        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }

        showorder = EditorGUILayout.Foldout(showorder, "Modifier Order");

        if (showorder && mod.mods != null)
        {
            for (int i = 0; i < mod.mods.Length; i++)
            {
                EditorGUILayout.LabelField("", i.ToString() + " - " + mod.mods[i].ModName() + " " + mod.mods[i].Order);
            }
        }

        // Group stuff
        if (GUILayout.Button("Group Members"))
        {
            showgroups = !showgroups;
        }

        if (showgroups)
        {
            //if ( GUILayout.Button("Add Object") )
            //{
            //MegaModifierTarget targ = new MegaModifierTarget();
            //	mod.group.Add(targ);
            //}

            for (int i = 0; i < mod.group.Count; i++)
            {
                EditorGUILayout.BeginHorizontal();
                mod.group[i] = (GameObject)EditorGUILayout.ObjectField("Obj " + i, mod.group[i], typeof(GameObject), true);
                if (GUILayout.Button("Del"))
                {
                    mod.group.Remove(mod.group[i]);
                    i--;
                }
                EditorGUILayout.EndHorizontal();
            }

            GameObject newobj = (GameObject)EditorGUILayout.ObjectField("Add", null, typeof(GameObject), true);
            if (newobj)
            {
                mod.group.Add(newobj);
            }

            if (GUILayout.Button("Update"))
            {
                // for each group member check if it has a modify object comp, if not add one and copy values over
                // calculate box for all meshes and set, and set the Offset for each one
                // then for each modifier attached find or add and set instance value
                // in theory each gizmo should overlap the others

                // Have a method to update box and offsets if we allow moving in the group
            }
        }

        //if ( GUILayout.Button("Create Copy") )
        //{
        //	CloneObject();
        //}
    }
Ejemplo n.º 9
0
    public override void OnInspectorGUI()
    {
        MegaModifyObject mod = (MegaModifyObject)target;

        MegaModifiers.GlobalDisplay = EditorGUILayout.Toggle("GlobalDisplayGizmos", MegaModifiers.GlobalDisplay);
        mod.Enabled     = EditorGUILayout.Toggle("Enabled", mod.Enabled);
        mod.recalcnorms = EditorGUILayout.Toggle("Recalc Normals", mod.recalcnorms);
        MegaNormalMethod method = mod.NormalMethod;

        mod.NormalMethod   = (MegaNormalMethod)EditorGUILayout.EnumPopup("Normal Method", mod.NormalMethod);
        mod.recalcbounds   = EditorGUILayout.Toggle("Recalc Bounds", mod.recalcbounds);
        mod.recalcCollider = EditorGUILayout.Toggle("Recalc Collider", mod.recalcCollider);
        mod.recalcTangents = EditorGUILayout.Toggle("Recalc Tangents", mod.recalcTangents);
        //mod.DoLateUpdate	= EditorGUILayout.Toggle("Do Late Update", mod.DoLateUpdate);
        mod.UpdateMode      = (MegaUpdateMode)EditorGUILayout.EnumPopup("Update Mode", mod.UpdateMode);
        mod.InvisibleUpdate = EditorGUILayout.Toggle("Invisible Update", mod.InvisibleUpdate);
        bool dynamicMesh = EditorGUILayout.Toggle("Dynamic Mesh", mod.dynamicMesh);

        if (dynamicMesh != mod.dynamicMesh)
        {
            mod.dynamicMesh = dynamicMesh;
            mod.GetMesh(true);
        }
        //mod.GrabVerts		= EditorGUILayout.Toggle("Grab Verts", mod.GrabVerts);
        mod.DrawGizmos = EditorGUILayout.Toggle("Draw Gizmos", mod.DrawGizmos);

        if (mod.NormalMethod != method && mod.NormalMethod == MegaNormalMethod.Mega)
        {
            mod.BuildNormalMapping(mod.mesh, false);
        }

        //showmulti = EditorGUILayout.Foldout(showmulti, "Multi Core");
#if !UNITY_FLASH && !UNITY_METRO && !UNITY_WP8
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Copy Object"))
        {
            GameObject obj = MegaCopyObject.DoCopyObjects(mod.gameObject);
            if (obj)
            {
                obj.transform.position = mod.gameObject.transform.position;

                Selection.activeGameObject = obj;
            }
        }

        if (GUILayout.Button("Copy Hierarchy"))
        {
            GameObject obj = MegaCopyObject.DoCopyObjectsChildren(mod.gameObject);
            Selection.activeGameObject = obj;
        }

        EditorGUILayout.EndHorizontal();
#endif
        if (GUILayout.Button("Threading Options"))
        {
            showmulti = !showmulti;
        }

        if (showmulti)
        {
            MegaModifiers.ThreadingOn = EditorGUILayout.Toggle("Threading Enabled", MegaModifiers.ThreadingOn);
            mod.UseThreading          = EditorGUILayout.Toggle("Thread This Object", mod.UseThreading);
        }

#if !UNITY_5
        EditorGUIUtility.LookLikeControls();
#endif

        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }

        showorder = EditorGUILayout.Foldout(showorder, "Modifier Order");

        if (showorder && mod.mods != null)
        {
            for (int i = 0; i < mod.mods.Length; i++)
            {
                EditorGUILayout.BeginHorizontal("box");
                EditorGUILayout.LabelField("", i.ToString() + " - " + mod.mods[i].ModName() + " " + mod.mods[i].Order + " MaxLOD: " + mod.mods[i].MaxLOD);
                if (mod.mods[i].Label != "")
                {
                    EditorGUILayout.LabelField("\t" + mod.mods[i].Label);
                }
#if false
                if (i > 0)
                {
                    if (GUILayout.Button("Up", GUILayout.Width(40)))
                    {
                        MegaModifier m = mod.mods[i - 1];
                        mod.mods[i - 1] = mod.mods[i];
                        mod.mods[i]     = m;
                    }
                }

                if (i < mod.mods.Length - 1)
                {
                    if (GUILayout.Button("Down", GUILayout.Width(40)))
                    {
                        MegaModifier m = mod.mods[i + 1];
                        mod.mods[i + 1] = mod.mods[i];
                        mod.mods[i]     = m;
                    }
                }
#endif
                EditorGUILayout.EndHorizontal();
            }
        }

        // Group stuff
        if (GUILayout.Button("Group Members"))
        {
            showgroups = !showgroups;
        }

        if (showgroups)
        {
            //if ( GUILayout.Button("Add Object") )
            //{
            //MegaModifierTarget targ = new MegaModifierTarget();
            //	mod.group.Add(targ);
            //}

            for (int i = 0; i < mod.group.Count; i++)
            {
                EditorGUILayout.BeginHorizontal();
                mod.group[i] = (GameObject)EditorGUILayout.ObjectField("Obj " + i, mod.group[i], typeof(GameObject), true);
                if (GUILayout.Button("Del"))
                {
                    mod.group.Remove(mod.group[i]);
                    i--;
                }
                EditorGUILayout.EndHorizontal();
            }

            GameObject newobj = (GameObject)EditorGUILayout.ObjectField("Add", null, typeof(GameObject), true);
            if (newobj)
            {
                mod.group.Add(newobj);
            }

            if (GUILayout.Button("Update"))
            {
                // for each group member check if it has a modify object comp, if not add one and copy values over
                // calculate box for all meshes and set, and set the Offset for each one
                // then for each modifier attached find or add and set instance value
                // in theory each gizmo should overlap the others

                // Have a method to update box and offsets if we allow moving in the group
            }
        }

        //if ( GUILayout.Button("Create Copy") )
        //{
        //	CloneObject();
        //}
    }
Ejemplo n.º 10
0
    static void CreatePrefab()
    {
        if (Selection.activeGameObject != null)
        {
            if (!Directory.Exists("Assets/MegaPrefabs"))
            {
                AssetDatabase.CreateFolder("Assets", "MegaPrefabs");
            }

            GameObject obj = Selection.activeGameObject;

            // Make a copy?
            GameObject newobj = MegaCopyObject.DuplicateObjectForPrefab(obj);
            newobj.name = obj.name;

            // Get all modifyObjects in children
            MegaModifyObject[] mods = newobj.GetComponentsInChildren <MegaModifyObject>();

            int id = 0;

            for (int i = 0; i < mods.Length; i++)
            {
                // Need method to get the base mesh
                GameObject pobj = mods[i].gameObject;

                // Get the mesh and make an asset for it
                //Mesh mesh = MegaUtils.GetSharedMesh(pobj);
                GameObject inobj = null;
                Mesh       mesh  = MegaModifyObject.FindMesh(pobj, out inobj);

                if (mesh)
                {
                    //mods[i].ResetMeshInfo();
                    //mesh.vertices = mods[i].verts;	//_verts;	// mesh.vertices = GetVerts(true);
                    //mesh.uv = mods[i].uvs;	//GetUVs(true);
                    //mods[i].sverts = mods[i].verts;

                    //if ( mods[i].recalcnorms )
                    //mods[i].RecalcNormals();

                    //if ( mods[i].recalcbounds )
                    //mesh.RecalculateBounds();

                    if (!AssetDatabase.Contains(mesh))
                    {
                        string mname = mesh.name;
                        int    ix    = mname.IndexOf("Instance");
                        if (ix != -1)
                        {
                            mname = mname.Remove(ix);
                        }

                        string meshpath = "Assets/MegaPrefabs/" + mname + ".prefab";
                        id++;
                        AssetDatabase.CreateAsset(mesh, meshpath);
                        AssetDatabase.SaveAssets();
                        AssetDatabase.Refresh();
                    }
                }
            }

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

            for (int i = 0; i < wraps.Length; i++)
            {
                // Need method to get the base mesh
                GameObject pobj = wraps[i].gameObject;

                // Get the mesh and make an asset for it
                //Mesh mesh = MegaUtils.GetSharedMesh(pobj);
                GameObject inobj = null;
                Mesh       mesh  = MegaModifyObject.FindMesh(pobj, out inobj);

                if (mesh)
                {
                    if (!AssetDatabase.Contains(mesh))
                    {
                        string mname = mesh.name;

                        int ix = mname.IndexOf("Instance");
                        if (ix != -1)
                        {
                            mname = mname.Remove(ix);
                        }

                        string meshpath = "Assets/MegaPrefabs/" + mname + ".prefab";
                        id++;
                        AssetDatabase.CreateAsset(mesh, meshpath);
                        AssetDatabase.SaveAssets();
                        AssetDatabase.Refresh();
                    }
                }
            }

#if UNITY_2019 || UNITY_2018_3 || UNITY_2020
            Object prefab = PrefabUtility.SaveAsPrefabAsset(newobj, "Assets/MegaPrefabs/" + newobj.name + "_Prefab.prefab");
            DestroyImmediate(newobj);
#else
            Object prefab = PrefabUtility.CreateEmptyPrefab("Assets/MegaPrefabs/" + newobj.name + "_Prefab.prefab");
            //EditorUtility.ReplacePrefab(newobj, prefab, ReplacePrefabOptions.ConnectToPrefab);
            PrefabUtility.ReplacePrefab(newobj, prefab, ReplacePrefabOptions.ConnectToPrefab);
            DestroyImmediate(newobj, true);
#endif
        }
    }
 static void DeepCopyNew()
 {
     MegaCopyObject.DeepCopy(Selection.activeGameObject);
 }