341 lines
11 KiB
C#
341 lines
11 KiB
C#
|
|
// =================================
|
|
// Namespaces.
|
|
// =================================
|
|
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
using System.Linq;
|
|
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
// =================================
|
|
// Define namespace.
|
|
// =================================
|
|
|
|
namespace MirzaBeig
|
|
{
|
|
|
|
namespace MultiAssetRenamer
|
|
{
|
|
|
|
// =================================
|
|
// Classes.
|
|
// =================================
|
|
|
|
public class MultiAssetRenamer : EditorWindow
|
|
{
|
|
// =================================
|
|
// Nested classes and structures.
|
|
// =================================
|
|
|
|
// ...
|
|
|
|
// =================================
|
|
// Variables.
|
|
// =================================
|
|
|
|
// The paths of the selected assets.
|
|
|
|
List<string> selectedAssetPaths = new List<string>();
|
|
|
|
// Scrolling view position for selected assets.
|
|
|
|
Vector2 scrollPosition;
|
|
|
|
// Find and replace.
|
|
|
|
string findString = "find";
|
|
string replaceString = "replace";
|
|
|
|
string addToStartString = "addToStart";
|
|
string addToEndString = "addToEnd";
|
|
|
|
int removeFromStartCount = 0;
|
|
int removeFromEndCount = 0;
|
|
|
|
// For labeling and tooltips.
|
|
|
|
GUIContent guiContentLabel;
|
|
|
|
// =================================
|
|
// Functions.
|
|
// =================================
|
|
|
|
// ...
|
|
|
|
[MenuItem("Window/Mirza Beig/Multi-Asset Renamer")]
|
|
static void showEditor()
|
|
{
|
|
EditorWindow.GetWindow<MultiAssetRenamer>(false, "Mirza Beig - Multi-Asset Renamer");
|
|
}
|
|
|
|
// ...
|
|
|
|
void updateSelectedAssetPaths()
|
|
{
|
|
// Clear for updated selection.
|
|
|
|
selectedAssetPaths.Clear();
|
|
|
|
// Populate asset paths selection.
|
|
|
|
for (int i = 0; i < Selection.assetGUIDs.Length; i++)
|
|
{
|
|
selectedAssetPaths.Add(AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[i]));
|
|
}
|
|
|
|
Repaint();
|
|
}
|
|
|
|
// ...
|
|
|
|
void OnSelectionChange()
|
|
{
|
|
updateSelectedAssetPaths();
|
|
}
|
|
|
|
// ...
|
|
|
|
string getAssetNameFromPath(string path)
|
|
{
|
|
// Get name from after folder path.
|
|
|
|
int lastIndexOfFolderSlash = path.LastIndexOf('/') + 1;
|
|
|
|
string assetName = path.Substring(
|
|
path.LastIndexOf('/') + 1, path.Length - lastIndexOfFolderSlash);
|
|
|
|
// Get name from before asset type (*.prefab, *.png, etc...).
|
|
// Folders also count as assets in Unity. Check if path has an extension.
|
|
|
|
if (assetName.Contains('.'))
|
|
{
|
|
assetName = assetName.Substring(0, assetName.LastIndexOf('.'));
|
|
}
|
|
|
|
return assetName;
|
|
}
|
|
|
|
// ...
|
|
|
|
void OnGUI()
|
|
{
|
|
// Find and replace settings.
|
|
|
|
EditorGUILayout.Separator();
|
|
|
|
EditorGUILayout.LabelField("- Find & Replace Settings:", EditorStyles.boldLabel);
|
|
EditorGUILayout.Separator();
|
|
|
|
guiContentLabel = new GUIContent("Find String", "Find string in selected assets.");
|
|
findString = EditorGUILayout.TextField(guiContentLabel, findString);
|
|
|
|
guiContentLabel = new GUIContent("Replace String", "Replace string in selected assets.");
|
|
replaceString = EditorGUILayout.TextField(guiContentLabel, replaceString);
|
|
|
|
EditorGUILayout.Separator();
|
|
|
|
// Button to replace string in selected assets.
|
|
|
|
guiContentLabel = new GUIContent("Find and Replace",
|
|
"Find and replace string in selected assets.");
|
|
|
|
if (GUILayout.Button(guiContentLabel))
|
|
{
|
|
for (int i = 0; i < selectedAssetPaths.Count; i++)
|
|
{
|
|
string assetName =
|
|
getAssetNameFromPath(selectedAssetPaths[i]);
|
|
|
|
if (assetName.Contains(findString))
|
|
{
|
|
AssetDatabase.RenameAsset(selectedAssetPaths[i], assetName.Replace(findString, replaceString));
|
|
}
|
|
}
|
|
|
|
updateSelectedAssetPaths();
|
|
}
|
|
|
|
// Add to start settings.
|
|
|
|
EditorGUILayout.Separator();
|
|
|
|
EditorGUILayout.LabelField("- Add to Start Settings:", EditorStyles.boldLabel);
|
|
EditorGUILayout.Separator();
|
|
|
|
guiContentLabel = new GUIContent("Add to Start String", "Add to start.");
|
|
addToStartString = EditorGUILayout.TextField(guiContentLabel, addToStartString);
|
|
|
|
EditorGUILayout.Separator();
|
|
|
|
// Button to add string in selected assets.
|
|
|
|
guiContentLabel = new GUIContent("Add to Start",
|
|
"Add string to start in selected assets.");
|
|
|
|
if (GUILayout.Button(guiContentLabel))
|
|
{
|
|
for (int i = 0; i < selectedAssetPaths.Count; i++)
|
|
{
|
|
string assetName =
|
|
getAssetNameFromPath(selectedAssetPaths[i]);
|
|
|
|
AssetDatabase.RenameAsset(selectedAssetPaths[i], assetName.Insert(0, addToStartString));
|
|
}
|
|
|
|
updateSelectedAssetPaths();
|
|
}
|
|
|
|
// Add to end settings.
|
|
|
|
EditorGUILayout.Separator();
|
|
|
|
EditorGUILayout.LabelField("- Add to End Settings:", EditorStyles.boldLabel);
|
|
EditorGUILayout.Separator();
|
|
|
|
guiContentLabel = new GUIContent("Add to End String", "Add to end.");
|
|
addToEndString = EditorGUILayout.TextField(guiContentLabel, addToEndString);
|
|
|
|
EditorGUILayout.Separator();
|
|
|
|
// Button to add string in selected assets.
|
|
|
|
guiContentLabel = new GUIContent("Add to End",
|
|
"Add string to end in selected assets.");
|
|
|
|
if (GUILayout.Button(guiContentLabel))
|
|
{
|
|
for (int i = 0; i < selectedAssetPaths.Count; i++)
|
|
{
|
|
string assetName =
|
|
getAssetNameFromPath(selectedAssetPaths[i]);
|
|
|
|
AssetDatabase.RenameAsset(selectedAssetPaths[i], assetName + addToEndString);
|
|
}
|
|
|
|
updateSelectedAssetPaths();
|
|
}
|
|
|
|
// Remove from Start settings.
|
|
|
|
EditorGUILayout.Separator();
|
|
|
|
EditorGUILayout.LabelField("- Remove from Start Settings:", EditorStyles.boldLabel);
|
|
EditorGUILayout.Separator();
|
|
|
|
guiContentLabel = new GUIContent("Remove From Start Count", "Remove from Start.");
|
|
removeFromStartCount = EditorGUILayout.IntField(guiContentLabel, removeFromStartCount);
|
|
|
|
EditorGUILayout.Separator();
|
|
|
|
// Button to remove string at end from selected assets.
|
|
|
|
guiContentLabel = new GUIContent("Remove From Start",
|
|
"Remove these many characters from the start.");
|
|
|
|
if (GUILayout.Button(guiContentLabel))
|
|
{
|
|
for (int i = 0; i < selectedAssetPaths.Count; i++)
|
|
{
|
|
string assetName =
|
|
getAssetNameFromPath(selectedAssetPaths[i]);
|
|
|
|
AssetDatabase.RenameAsset(selectedAssetPaths[i], assetName.Substring(removeFromStartCount, assetName.Length - removeFromStartCount));
|
|
}
|
|
|
|
updateSelectedAssetPaths();
|
|
}
|
|
|
|
EditorGUILayout.Separator();
|
|
|
|
// Remove from end settings (truncate).
|
|
|
|
EditorGUILayout.Separator();
|
|
|
|
EditorGUILayout.LabelField("- Remove from End Settings:", EditorStyles.boldLabel);
|
|
EditorGUILayout.Separator();
|
|
|
|
guiContentLabel = new GUIContent("Remove From End Count", "Remove from end.");
|
|
removeFromEndCount = EditorGUILayout.IntField(guiContentLabel, removeFromEndCount);
|
|
|
|
EditorGUILayout.Separator();
|
|
|
|
// Button to remove string at end from selected assets.
|
|
|
|
guiContentLabel = new GUIContent("Remove From End",
|
|
"Remove these many characters from the end.");
|
|
|
|
if (GUILayout.Button(guiContentLabel))
|
|
{
|
|
for (int i = 0; i < selectedAssetPaths.Count; i++)
|
|
{
|
|
string assetName =
|
|
getAssetNameFromPath(selectedAssetPaths[i]);
|
|
|
|
AssetDatabase.RenameAsset(selectedAssetPaths[i], assetName.Substring(0, assetName.Length - removeFromEndCount));
|
|
}
|
|
|
|
updateSelectedAssetPaths();
|
|
}
|
|
|
|
EditorGUILayout.Separator();
|
|
|
|
// Selected objects.
|
|
|
|
guiContentLabel = new GUIContent("- Selected:",
|
|
"Valid folder and typed assets selected in the PROJECT view.");
|
|
|
|
EditorGUILayout.LabelField(guiContentLabel, EditorStyles.boldLabel);
|
|
EditorGUILayout.Separator();
|
|
|
|
scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);
|
|
{
|
|
if (selectedAssetPaths.Count == 0)
|
|
{
|
|
EditorGUILayout.LabelField("Please select some asset(s) in the project view.", EditorStyles.miniBoldLabel);
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < selectedAssetPaths.Count; i++)
|
|
{
|
|
EditorGUILayout.BeginHorizontal();
|
|
{
|
|
//EditorGUILayout.LabelField("> " + selectedAssetPaths[i], EditorStyles.miniLabel);
|
|
EditorGUILayout.LabelField("> " + getAssetNameFromPath(selectedAssetPaths[i]), EditorStyles.miniLabel);
|
|
}
|
|
|
|
EditorGUILayout.EndHorizontal();
|
|
}
|
|
}
|
|
}
|
|
EditorGUILayout.EndScrollView();
|
|
}
|
|
|
|
// ...
|
|
|
|
void OnFocus()
|
|
{
|
|
updateSelectedAssetPaths();
|
|
}
|
|
|
|
// =================================
|
|
// End functions.
|
|
// =================================
|
|
|
|
}
|
|
|
|
// =================================
|
|
// End namespace.
|
|
// =================================
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// =================================
|
|
// --END-- //
|
|
// =================================
|