1、效果展示
2、功能介绍
右键选中选择要生成的路径
3、代码
using UnityEditor;
using UnityEngine;
public class CreateChildPrefab : MonoBehaviour
{
// 添加一个新的右键菜单选项,当点击时调用这个静态方法
[MenuItem("GameObject/Tools/将选中的子物体全部生成预制体", false, 20)]
public static void CreateCustomObject()
{
//选择一个文件夹来保存预制件
string folderPath = EditorUtility.SaveFolderPanel("选择保存预制体的文件夹", "Assets", "");
// 检查用户是否选择了有效的文件夹路径
if (string.IsNullOrEmpty(folderPath))
{
Debug.LogWarning("未选择文件夹,操作取消.");
return;
}
// 获取层次结构中的选定对象
Object selectedObject = Selection.activeObject;
if (selectedObject != null && selectedObject is GameObject game)
{
// 循环遍历所选GameObject的所有子对象
for (int i = 0; i < game.transform.childCount; i++)
{
Transform childTrans = game.transform.GetChild(i);
// 克隆当前子对象
GameObject clonedObject = Object.Instantiate(childTrans.gameObject, childTrans.position, childTrans.rotation);
//使用所选文件夹和子对象名称生成预制路径
string localPath = $"Assets{folderPath.Substring(Application.dataPath.Length)}/{childTrans.name}.prefab";
//将克隆对象保存为所选文件夹中的预制件
PrefabUtility.SaveAsPrefabAsset(clonedObject, localPath);
// 保存预制件后销毁克隆对象
Object.DestroyImmediate(clonedObject);
}
}
else
{
Debug.LogWarning("请选中一个包含子物体的GameObject.");
}
}
}