CreatePrefabFromSelected
unknown
csharp
4 years ago
2.2 kB
7
Indexable
using System;
using UnityEditor;
using UnityEngine;
using System.Collections;
using System.IO;
namespace AWWorldEditor
{
class CreatePrefabFromSelected : ScriptableObject
{
const string menuTitle = "Tools/Axeyworks/Create Prefab(s) From Selected";
[MenuItem(menuTitle, false, 304)]
static void CreatePrefab()
{
var objs = Selection.gameObjects;
string pathBase = EditorUtility.SaveFolderPanel("Choose save folder", "Assets", "");
if (!String.IsNullOrEmpty(pathBase))
{
pathBase = pathBase.Remove(0, pathBase.IndexOf("Assets")) + Path.DirectorySeparatorChar;
foreach (var go in objs)
{
String localPath = pathBase + go.name + ".prefab";
localPath = localPath.Replace('\\', '/');
if (AssetDatabase.LoadAssetAtPath(localPath, typeof(GameObject)))
{
if (EditorUtility.DisplayDialog("Are you sure?",
"The prefab already exists." + "\n" + "Do you want to overwrite it?",
"Yes",
"No"))
CreateNew(go, localPath);
}
else
{
CreateNew(go, localPath);
}
}
}
}
static void CreateNew(GameObject obj, string localPath)
{
localPath = localPath.Replace('\\', '/');
#if UNITY_2018_3_OR_NEWER
PrefabUtility.SaveAsPrefabAssetAndConnect(obj, localPath, InteractionMode.UserAction);
AssetDatabase.Refresh();
#else
UnityEngine.Object prefab = PrefabUtility.CreatePrefab(localPath, obj);
PrefabUtility.ReplacePrefab(obj, prefab, ReplacePrefabOptions.ConnectToPrefab);
AssetDatabase.Refresh();
#endif
}
[MenuItem(menuTitle, true, 5000)]
static bool ValidateCreatePrefab()
{
return Selection.activeGameObject != null;
}
}
}Editor is loading...