1.快速给场景中选中的物体添加一个父类,并可以用快捷键alt+p
[MenuItem("MyTools/CreateOneParent &p", false, 5)]
public static void CreateOneParent()
{
if (Selection.transforms.Length > 0)
{
Transform[] tf = Selection.transforms;
GameObject go = new GameObject();
go.transform.localScale = Vector3.one;
go.transform.position = Vector3.zero;
go.name = "Parent";
for (int i = 0; i < tf.Length; i++)
{
tf[i].SetParent(go.transform);
}
}
}
2.快速对选中的多个预制体进行apply
[MenuItem("MyTools/Apply_To_Prefab", false, 61)]
public static void Apply_To_Prefab()
{
GameObject[] gos = Selection.gameObjects;
for (int i = 0; i < gos.Length; i++)
{
GameObject souce = PrefabUtility.GetPrefabParent(gos[i]) as GameObject;
if (souce == null) //当前没有该预制体
{
GameObject go = Selection.activeGameObject;
string path = "Assets/APP/Prefabs/";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
path += Selection.activeGameObject.name + ".prefab";
PrefabUtility.CreatePrefab(path, go);
}
else
{
PrefabUtility.ReplacePrefab(gos[i], souce, ReplacePrefabOptions.ConnectToPrefab);
}
EditorUtility.DisplayProgressBar("apply", "apply中....", (float)i / gos.Length);
}
EditorUtility.ClearProgressBar();
}
3.快速对选中的预制体进行一些操作,(例子中是给预制体添加一个图片作为子物体)
[MenuItem("MyTools/AddLocked", false, 71)]
public static void AddLocked()
{
GameObject[] prefabs = Selection.gameObjects;
for (int i = 0; i < prefabs.Length; i++)
{
Debug.Log(prefabs[i].name);
GameObject souce = PrefabUtility.InstantiatePrefab(prefabs[i]) as GameObject;
float y = souce.GetComponent<BoxCollider2D>().offset.y;
GameObject go = new GameObject("LockedImg");
go.transform.parent = souce.transform.Find("BlockObject");
go.transform.localPosition = Vector3.zero;
go.transform.localScale = Vector3.one;
go.AddComponent<SortingGroup>().sortingOrder = 100;
Sprite lockSp = Resources.Load<Sprite>("lock");
GameObject lockGo = new GameObject("lock");
lockGo.transform.parent = go.transform;
lockGo.transform.localPosition = Vector3.zero + new Vector3(0, y, 0);
lockGo.transform.localScale = Vector3.one;
lockGo.AddComponent<SpriteRenderer>().sprite = lockSp;
lockGo.GetComponent<SpriteRenderer>().sortingOrder = 20;
EditorUtility.DisplayProgressBar("Apply预制体……", "Apply预制体……", (float)i / prefabs.Length);
PrefabUtility.ReplacePrefab(souce, prefabs[i], ReplacePrefabOptions.ConnectToPrefab);
DestroyImmediate(souce);
}
EditorUtility.ClearProgressBar();
}