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