- Home /
Question by
AstroBeans9 · May 12, 2020 at 11:22 PM ·
sceneseditorgui
[SOLVED] Swapping Scene Names (or Asset Names)
This post is for future users that want to swap to scene names automatically through code.
(1) CREATE A C# SCRIPT and paste the following inside.
NOTE: Change the class name to the C# Script name.
using UnityEngine;
using UnityEditor;
using UnityEngine.SceneManagement;
using System;
public class SceneNameEditor : EditorWindow
{
const string path = "Assets/Scenes/"; //CHANGE THIS TO THE FOLDER CONTAINING WHATEVER ASSET YOU WANT TO SWAP THE LAST "/" IS VERY IMPORTANT
const string tempSceneName = "tempAssetSceneFromEditor"; //A TEMP NAME that you probably won't ever actually use lol
const string exten = ".unity"; //CHANGE THIS TO THE EXTENSION OF THE ASSET YOU MOVING (for scenes its .unity). THE "." is very important
string levelNumber1 = "Level01";
string levelNumber2 = "Level02";
string levelNumberToInsert = "Level07";
string levelNumberToGo = "Level09";
[MenuItem("Window/Scene Changer")]
public static void ShowWindow()
{
GetWindow<SceneNameEditor>("Scene Changer");
}
void OnGUI()
{
levelNumber1 = EditorGUILayout.TextField("Level Number (1)", levelNumber1);
levelNumber2 = EditorGUILayout.TextField("Level Number (2)", levelNumber2);
if (GUILayout.Button("SWAP!"))
{
levelNumber1 = EditorGUILayout.TextField("Level Number (1)", levelNumber1);
levelNumber2 = EditorGUILayout.TextField("Level Number (2)", levelNumber2);
SwapNames(levelNumber1, levelNumber2);
AssetDatabase.SaveAssets();
}
levelNumberToInsert = EditorGUILayout.TextField("Level Insert", levelNumberToInsert);
levelNumberToGo = EditorGUILayout.TextField("Level To Go", levelNumberToGo);
if (GUILayout.Button("INSERT!"))
{
levelNumberToInsert = EditorGUILayout.TextField("Level Insert", levelNumberToInsert);
levelNumberToGo = EditorGUILayout.TextField("Level To Go", levelNumberToGo);
InsertInto(levelNumberToInsert,levelNumberToGo);
AssetDatabase.SaveAssets();
}
}
//You can tailor this to work with any asset, in this case, its using for swapping scene names.
void SwapNames(string name1, string name2)
{
string tempName1 = name1;
string tempName2 = name2;
AssetDatabase.RenameAsset(path + name1 + exten, tempSceneName + exten); //curr origLevel 1
AssetDatabase.RenameAsset(path + name2 + exten, tempName1 + exten); //curr origLevel 2 w/ Level01 name
AssetDatabase.RenameAsset(path + tempSceneName + exten, tempName2 + exten);// curr origLevel 1 now to Level02
}
void InsertInto(string levelToMove, string posToGo)
{
if (isExists(posToGo))
{
InsertInto(posToGo, getNextLevel(posToGo));
}
AssetDatabase.RenameAsset(path + levelToMove + exten, posToGo);
}
string getNextLevel(string currLevel)
{
string sNumbs = "";
int size = currLevel.Length;
for (int i = 0; i < size; i++)
{
if (i <= 4)
{
continue;
}
sNumbs += currLevel[i];
}
int numb = Convert.ToInt32(sNumbs);
numb += 1;
sNumbs = numb.ToString();
if (numb < 10)
{
sNumbs = "0" + sNumbs;
}
return "Level" + sNumbs;
}
bool isExists(string assetName)
{
SceneAsset s = AssetDatabase.LoadAssetAtPath(path + assetName + exten, typeof(SceneAsset)) as SceneAsset;
if (s == null)
{
return false;
}
return true;
}
}
Comment