From 329f7d8f2bb8306b5df409f5ab03d1cd44595455 Mon Sep 17 00:00:00 2001 From: mika Date: Fri, 17 May 2024 11:35:26 +0300 Subject: [PATCH 01/30] Add editor tool to replace string in selected gameobject names --- .../ReplaceCharacterInGameObjectNames.cs | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Assets/Scripts/Editor/BatchTools/ReplaceCharacterInGameObjectNames.cs diff --git a/Assets/Scripts/Editor/BatchTools/ReplaceCharacterInGameObjectNames.cs b/Assets/Scripts/Editor/BatchTools/ReplaceCharacterInGameObjectNames.cs new file mode 100644 index 0000000..105bc74 --- /dev/null +++ b/Assets/Scripts/Editor/BatchTools/ReplaceCharacterInGameObjectNames.cs @@ -0,0 +1,69 @@ +// editor tool to replace string from selected GameObject names + +using UnityEngine; +using UnityEditor; +using UnityEditor.SceneManagement; + +namespace UnityLibrary.Tools +{ + public class ReplaceCharacterInGameObjectNames : EditorWindow + { + private string searchString = "|"; + private string replaceString = "@"; + + [MenuItem("Tools/Replace Characters in GameObject Names")] + public static void ShowWindow() + { + GetWindow("Replace Characters"); + } + + private void OnGUI() + { + GUILayout.Label("Replace Characters in Selected GameObject Names", EditorStyles.boldLabel); + + searchString = EditorGUILayout.TextField("Search String", searchString); + replaceString = EditorGUILayout.TextField("Replace String", replaceString); + + int selectedObjectCount = Selection.gameObjects.Length; + GUILayout.Label($"Selected GameObjects: {selectedObjectCount}", EditorStyles.label); + + if (GUILayout.Button("Replace")) + { + ReplaceCharacters(); + } + } + + private void ReplaceCharacters() + { + GameObject[] selectedObjects = Selection.gameObjects; + + if (selectedObjects.Length == 0) + { + Debug.LogWarning("No GameObjects selected."); + return; + } + + // Start a new undo group + Undo.IncrementCurrentGroup(); + Undo.SetCurrentGroupName("Replace Character in GameObject Names"); + int undoGroup = Undo.GetCurrentGroup(); + + foreach (GameObject obj in selectedObjects) + { + if (obj.name.Contains(searchString)) + { + Undo.RecordObject(obj, "Replace Character in GameObject Name"); + obj.name = obj.name.Replace(searchString, replaceString); + EditorUtility.SetDirty(obj); + } + } + + // End the undo group + Undo.CollapseUndoOperations(undoGroup); + + EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); + + Debug.Log($"Replaced '{searchString}' with '{replaceString}' in the names of selected GameObjects."); + } + } +} From 2296f02dabe31b8d5a1491308c82e9f13c761010 Mon Sep 17 00:00:00 2001 From: mika Date: Fri, 17 May 2024 11:55:08 +0300 Subject: [PATCH 02/30] add editor tool to copy selected gameobject names to clipboard as a list --- .../Editor/BatchTools/CopyGameObjectNames.cs | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Assets/Scripts/Editor/BatchTools/CopyGameObjectNames.cs diff --git a/Assets/Scripts/Editor/BatchTools/CopyGameObjectNames.cs b/Assets/Scripts/Editor/BatchTools/CopyGameObjectNames.cs new file mode 100644 index 0000000..de28cd4 --- /dev/null +++ b/Assets/Scripts/Editor/BatchTools/CopyGameObjectNames.cs @@ -0,0 +1,55 @@ +// editor tool to copy names of selected GameObjects to clipboard as a list (so you can paste them in Excel or others..) + +using UnityEngine; +using UnityEditor; +using System.Text; +namespace UnityLibrary.Tools +{ + public class CopyGameObjectNames : EditorWindow + { + private string gameObjectNames = string.Empty; + + [MenuItem("Tools/Copy GameObject Names")] + public static void ShowWindow() + { + GetWindow("Copy GameObject Names"); + } + + private void OnGUI() + { + GUILayout.Label("Copy Names of Selected GameObjects", EditorStyles.boldLabel); + + if (GUILayout.Button("Fetch Names")) + { + FetchNames(); + } + + GUILayout.Label("GameObject Names:", EditorStyles.label); + gameObjectNames = EditorGUILayout.TextArea(gameObjectNames, GUILayout.Height(200)); + + if (GUILayout.Button("Copy to Clipboard")) + { + CopyToClipboard(); + } + } + + private void FetchNames() + { + StringBuilder sb = new StringBuilder(); + GameObject[] selectedObjects = Selection.gameObjects; + + foreach (GameObject obj in selectedObjects) + { + sb.AppendLine(obj.name); + } + + gameObjectNames = sb.ToString(); + } + + private void CopyToClipboard() + { + EditorGUIUtility.systemCopyBuffer = gameObjectNames; + Debug.Log("GameObject names copied to clipboard."); + } + } +} \ No newline at end of file From a39816f5b4a5a2a9d305ec13ac3aef017d49c9b9 Mon Sep 17 00:00:00 2001 From: mika Date: Fri, 17 May 2024 12:21:40 +0300 Subject: [PATCH 03/30] Fix CopyGameObjectNames.cs to copy in correct hierarchy order --- Assets/Scripts/Editor/BatchTools/CopyGameObjectNames.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Editor/BatchTools/CopyGameObjectNames.cs b/Assets/Scripts/Editor/BatchTools/CopyGameObjectNames.cs index de28cd4..40bf0d0 100644 --- a/Assets/Scripts/Editor/BatchTools/CopyGameObjectNames.cs +++ b/Assets/Scripts/Editor/BatchTools/CopyGameObjectNames.cs @@ -3,6 +3,7 @@ using UnityEngine; using UnityEditor; using System.Text; +using System.Linq; namespace UnityLibrary.Tools { public class CopyGameObjectNames : EditorWindow @@ -38,7 +39,10 @@ private void FetchNames() StringBuilder sb = new StringBuilder(); GameObject[] selectedObjects = Selection.gameObjects; - foreach (GameObject obj in selectedObjects) + // Sort the selected objects by their sibling index + var sortedObjects = selectedObjects.OrderBy(go => go.transform.GetSiblingIndex()).ToArray(); + + foreach (GameObject obj in sortedObjects) { sb.AppendLine(obj.name); } @@ -52,4 +56,4 @@ private void CopyToClipboard() Debug.Log("GameObject names copied to clipboard."); } } -} \ No newline at end of file +} From f13f9beb250f96c99661b967b4fce3e92ccc8949 Mon Sep 17 00:00:00 2001 From: mika Date: Tue, 6 Aug 2024 13:17:11 +0300 Subject: [PATCH 04/30] Create RendererTypeCounter.cs --- .../Editor/Tools/RendererTypeCounter.cs | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 Assets/Scripts/Editor/Tools/RendererTypeCounter.cs diff --git a/Assets/Scripts/Editor/Tools/RendererTypeCounter.cs b/Assets/Scripts/Editor/Tools/RendererTypeCounter.cs new file mode 100644 index 0000000..0cc0ce2 --- /dev/null +++ b/Assets/Scripts/Editor/Tools/RendererTypeCounter.cs @@ -0,0 +1,108 @@ +// shows renderer stats from selected objects in the editor + +using UnityEngine; +using UnityEditor; + +namespace UnityLibrary +{ + public class RendererTypeCounter : EditorWindow + { + private int activeMeshRendererCount; + private int inactiveMeshRendererCount; + private int activeSkinnedMeshRendererCount; + private int inactiveSkinnedMeshRendererCount; + private int activeSpriteRendererCount; + private int inactiveSpriteRendererCount; + private int totalGameObjectCount; + + [MenuItem("Tools/Renderer Type Counter")] + public static void ShowWindow() + { + GetWindow("Renderer Type Counter"); + } + + private void OnGUI() + { + if (GUILayout.Button("Count Renderers")) + { + CountRenderersInSelection(); + } + + GUILayout.Space(10); + + GUILayout.Label("Active Mesh Renderers: " + activeMeshRendererCount); + GUILayout.Label("Inactive Mesh Renderers: " + inactiveMeshRendererCount); + GUILayout.Label("Active Skinned Mesh Renderers: " + activeSkinnedMeshRendererCount); + GUILayout.Label("Inactive Skinned Mesh Renderers: " + inactiveSkinnedMeshRendererCount); + GUILayout.Label("Active Sprite Renderers: " + activeSpriteRendererCount); + GUILayout.Label("Inactive Sprite Renderers: " + inactiveSpriteRendererCount); + GUILayout.Label("Total GameObjects: " + totalGameObjectCount); + } + + private void CountRenderersInSelection() + { + activeMeshRendererCount = 0; + inactiveMeshRendererCount = 0; + activeSkinnedMeshRendererCount = 0; + inactiveSkinnedMeshRendererCount = 0; + activeSpriteRendererCount = 0; + inactiveSpriteRendererCount = 0; + totalGameObjectCount = 0; + + foreach (GameObject obj in Selection.gameObjects) + { + CountRenderersRecursively(obj); + } + + Repaint(); + } + + private void CountRenderersRecursively(GameObject obj) + { + totalGameObjectCount++; + + bool isActive = obj.activeInHierarchy; + + if (obj.GetComponent()) + { + if (isActive) + { + activeMeshRendererCount++; + } + else + { + inactiveMeshRendererCount++; + } + } + + if (obj.GetComponent()) + { + if (isActive) + { + activeSkinnedMeshRendererCount++; + } + else + { + inactiveSkinnedMeshRendererCount++; + } + } + + if (obj.GetComponent()) + { + if (isActive) + { + activeSpriteRendererCount++; + } + else + { + inactiveSpriteRendererCount++; + } + } + + foreach (Transform child in obj.transform) + { + CountRenderersRecursively(child.gameObject); + } + } + } +} From 4532dd6984ad76ed9b4ea0d1458be943307b6b7f Mon Sep 17 00:00:00 2001 From: Hasan Bayat Date: Fri, 4 Oct 2024 11:49:26 +0330 Subject: [PATCH 05/30] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7f51b0..f185093 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Feel free to [:postbox: Post your ideas/comments/improvements/recommendations](h ## Credits - [UnityCoder (mika)](https://github.com/unitycoder) (Owner) -- [EmpireWorld (Hasan Bayat)](https://github.com/EmpireWorld) (Owner) +- [hasanbayatme (Hasan Bayat)](https://github.com/hasanbayatme) (Owner) - [Lootheo (Manuel Otheo)](https://github.com/Lootheo) (Member) - [igorrafael (Igor Rafael de Sousa)](https://github.com/igorrafael) (Member) - [nrlnd](https://github.com/nrlnd) (Member) From 3e2d55b01d812be62b5239fc8f2d4c3b3edd2a2b Mon Sep 17 00:00:00 2001 From: mika Date: Tue, 22 Oct 2024 21:46:37 +0300 Subject: [PATCH 06/30] Create FindWhatButtonCallsMyMethod.cs --- .../Tools/FindWhatButtonCallsMyMethod.cs | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Assets/Scripts/Editor/Tools/FindWhatButtonCallsMyMethod.cs diff --git a/Assets/Scripts/Editor/Tools/FindWhatButtonCallsMyMethod.cs b/Assets/Scripts/Editor/Tools/FindWhatButtonCallsMyMethod.cs new file mode 100644 index 0000000..e67f45b --- /dev/null +++ b/Assets/Scripts/Editor/Tools/FindWhatButtonCallsMyMethod.cs @@ -0,0 +1,69 @@ +// prints out which buttons in current scene are referencing your given method + +using UnityEngine; +using UnityEngine.UI; +using UnityEditor; +using UnityEngine.Events; +using System.Reflection; + +namespace UnityLibrary +{ + public class FindWhatButtonCallsMyMethod : EditorWindow + { + private string methodName = "MyMethodHere"; + + [MenuItem("Tools/Find Buttons with Method")] + public static void ShowWindow() + { + GetWindow("FindWhatButtonCallsMyMethod"); + } + + private void OnGUI() + { + GUILayout.Label("Find Buttons that call Method", EditorStyles.boldLabel); + methodName = EditorGUILayout.TextField("Method Name:", methodName); + + if (GUILayout.Button("Find Buttons")) + { + FindButtonsWithMethod(); + } + } + + private void FindButtonsWithMethod() + { + Button[] allButtons = FindObjectsOfType