예제 #1
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);
        }
    }
    //[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();
        //}
    }
예제 #3
0
    //[MenuItem("GameObject/Mega Copy Object")]
    static void DoCopyObjects()
    {
        GameObject from = Selection.activeGameObject;

        MegaCopyObject.DoCopyObjects(from);
    }
예제 #4
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();
        //}
    }