- using UnityEngine;
- using UnityEditor;
- using System.Collections;
- public class MultiPanel : EditorWindow
- {
- string addComponentString = "";
- string theLayer = "";
- string theRenameName = "";
- string theRenameNameSuf = "";
- string theYPos = "5.0";
- //Adding a menu entry
- [MenuItem("EditorTools/MultiPanel")]
- static void Init ()
- {
- // Get existing open window or if none, make a new one:
- MultiPanel window = (MultiPanel)EditorWindow.GetWindow (typeof(MultiPanel));
- window.Show ();
- }
- /*
- * GUI Generation
- */
- void OnGUI ()
- {
- GUILayout.Label ("MultiPanel by GTJuggler", EditorStyles.boldLabel);
- GUILayout.Label (" Operations for multiple selected objects", EditorStyles.miniLabel);
- GUILayout.Space (15);
- EditorGUILayout.BeginHorizontal ();
- /*
- * LEFT COLUMN
- */
- EditorGUILayout.BeginVertical ();
- GUILayout.Space (5);
- GUILayout.Label ("Zero out Transform");
- GUILayout.Space (5);
- GUILayout.Label ("Inherit Parent Transform");
- GUILayout.Space (15);
- GUILayout.Label ("Toggle Renderers");
- GUILayout.Space (5);
- GUILayout.Label ("Set Active Recursively");
- GUILayout.Space (15);
- GUILayout.Label ("Add Component");
- addComponentString = EditorGUILayout.TextField ("Rigidbody");
- GUILayout.Space (10);
- GUILayout.Label ("Remove Component");
- addComponentString = EditorGUILayout.TextField ("Rigidbody");
- GUILayout.Space (25);
- GUILayout.Label ("Layer and Tag Assignment");
- theLayer = EditorGUILayout.TextField (theLayer);
- GUILayout.Space (5);
- GUILayout.Label ("Rename exactly");
- theRenameName = EditorGUILayout.TextField (theRenameName);
- GUILayout.Space (5);
- GUILayout.Label ("Rename w/ numerical suffix");
- theRenameNameSuf = EditorGUILayout.TextField (theRenameNameSuf);
- EditorGUILayout.EndVertical ();
- /*
- * RIGHT COLUMN
- */
- EditorGUILayout.BeginVertical ();
- GUILayout.Space (5);
- if (GUILayout.Button ("Go")) {
- ZeroOutTransform ();
- }
- GUILayout.Space (2);
- if (GUILayout.Button ("Go")) {
- InheritParentTransform ();
- }
- GUILayout.Space (20);
- if (GUILayout.Button ("Toggle")) {
- ToggleRenderers ();
- }
- GUILayout.Space (2);
- if (GUILayout.Button ("Toggle")) {
- ToggleAllSelected ();
- }
- GUILayout.Space (35);
- if (GUILayout.Button ("Add")) {
- AddComponent ();
- }
- GUILayout.Space (29);
- if (GUILayout.Button ("Remove")) {
- RemoveComponent ();
- }
- GUILayout.Space (44);
- EditorGUILayout.BeginHorizontal ();
- if (GUILayout.Button ("Layer")) {
- ChangeLayer ();
- }
- if (GUILayout.Button ("Tag")) {
- ChangeTag ();
- }
- EditorGUILayout.EndHorizontal ();
- GUILayout.Space (24);
- if (GUILayout.Button ("Rename")) {
- Rename (false);
- }
- GUILayout.Space (24);
- if (GUILayout.Button ("Rename")) {
- Rename (true);
- }
- EditorGUILayout.EndVertical ();
- EditorGUILayout.EndHorizontal ();
- }
- /*
- * Functions
- */
- void MoveToYPos ()
- {
- float yPos = float.Parse (theYPos);
- Transform[] transforms = Selection.GetTransforms (SelectionMode.TopLevel | SelectionMode.OnlyUserModifiable);
- foreach (Transform tr in transforms) {
- tr.position = new Vector3 (tr.position.x, yPos, tr.position.z);
- }
- }
- void ZeroOutTransform ()
- {
- Transform[] transforms = Selection.GetTransforms (SelectionMode.TopLevel | SelectionMode.OnlyUserModifiable);
- foreach (Transform tr in transforms) {
- tr.position = Vector3.zero;
- tr.localScale = Vector3.zero;
- tr.rotation = Quaternion.identity;
- }
- }
- void InheritParentTransform ()
- {
- Transform[] transforms = Selection.GetTransforms (SelectionMode.TopLevel | SelectionMode.OnlyUserModifiable);
- foreach (Transform tr in transforms) {
- tr.transform.position = tr.parent.transform.position;
- tr.transform.rotation = tr.parent.transform.rotation;
- tr.transform.localScale = tr.parent.transform.localScale;
- }
- }
- void ToggleRenderers ()
- {
- Transform[] transforms = Selection.GetTransforms (SelectionMode.TopLevel | SelectionMode.OnlyUserModifiable);
- foreach (Transform transform in transforms) {
- if (transform.renderer)
- transform.renderer.enabled = !transform.renderer.enabled;
- }
- }
- void AddComponent ()
- {
- int total = 0;
- foreach (Transform currentTransform in Selection.transforms) {
- //add component
- Component existingComponent = currentTransform.GetComponent (addComponentString);
- if (!existingComponent) {
- currentTransform.gameObject.AddComponent (addComponentString);
- total++;
- }
- }
- if (total == 0)
- Debug.Log ("No components added.");
- else
- Debug.Log (total + " components of type \"" + addComponentString + "\" created.");
- }
- void RemoveComponent ()
- {
- int total = 0;
- foreach (Transform currentTransform in Selection.transforms) {
- //remove component
- Component existingComponent = currentTransform.GetComponent (addComponentString);
- if (existingComponent) {
- DestroyImmediate (existingComponent);
- total++;
- }
- }
- if (total == 0)
- Debug.Log ("No components destroyed.");
- else
- Debug.Log (total + " components of type \"" + addComponentString + "\" destroyed.");
- }
- void ToggleAllSelected ()
- {
- foreach (Transform t in Selection.transforms) {
- t.gameObject.SetActiveRecursively (!t.gameObject.active);
- }
- }
- void ChangeLayer ()
- {
- Object[] selectedObjects;
- selectedObjects = Selection.GetFiltered (typeof(GameObject), SelectionMode.TopLevel);
- foreach (GameObject go in selectedObjects) {
- LayerMask aLayer = LayerMask.NameToLayer (theLayer);
- if (aLayer.value != -1)
- go.layer = aLayer;
- }
- }
- void ChangeTag ()
- {
- Object[] selectedObjects;
- selectedObjects = Selection.GetFiltered (typeof(GameObject), SelectionMode.TopLevel);
- foreach (GameObject go in selectedObjects) {
- go.tag = theLayer;
- }
- }
- void Rename (bool numberedSuffix)
- {
- Transform[] transforms = Selection.GetTransforms (SelectionMode.TopLevel | SelectionMode.OnlyUserModifiable);
- ArrayList transformArray = new ArrayList ();
- foreach (Transform tr in transforms) {
- transformArray.Add (tr);
- }
- for (int i = 0; i < transformArray.Count; i++) {
- if(numberedSuffix)
- ((Transform)transformArray[i]).name = theRenameNameSuf + i.ToString ();
- else
- ((Transform)transformArray[i]).name = theRenameName;
- }
- //This hack below will ensure proper name sorting :/
- Transform origParent = ((Transform)transformArray[0]).parent;
- for (int i = 0; i < transformArray.Count; i++) {
- ((Transform)transformArray[i]).parent = (((Transform)transformArray[i]).parent).parent;
- ((Transform)transformArray[i]).parent = origParent;
- }
- }
- }