在unity 中 设置预制体时,一般情况下 是一个一个的拖拽 ,很方便。 但是,遇到需求是 制作大量的预支体时, 一个一个的拖拽,效率很低, 也很无聊。查找资料, 发现 是可以批量的制作预制体的。步骤如下:
1.需要引用unityEditor 命名空间, 用这个命名空间的话 , 脚本一般写在Editor 文件夹下面(没有的话自己创建一个)。
2.写一个静态方法来生成预制体, 方法的标头需要 [MenuItem(“Tools/ CreatPrefab”)]来修饰;
3.直接生成预支体的方法 PrefabUtility.CreatePrefab();
4.如果 所选的物体是预制体的话需要如下的方法了
PrefabUtility.CreateEmptyPrefab(); // 首先生成一个空的预支体;
tempPrefab = PrefabUtility.ReplacePrefab(); // 然后在替换掉他;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using System;
public class FbxToPrefabInEditor
{
[MenuItem("Tools/ CreatPrefab")]
public static void CreatPrefab()
{
Transform[] aaaa = Selection.transforms; // 只能在 Hierarchy 面板下多选,在其他面板 下 只能 选一个
Debug.Log(aaaa.Length);
if (aaaa.Length==0)
{
return;
}
// UnityEngine.Object tempPrefab;
//if (aaaa[0].transform.GetComponent<TaKeUp>())
//{
// Debug.Log("aaaaaaaa");
//}
Debug.Log(Application.dataPath + " lujing");
for (int i = 0; i < aaaa.Length; i++)
{
//tempPrefab = PrefabUtility.CreateEmptyPrefab(Application.dataPath+"/Resources"+ aaaa[i].name+".prefab");
//tempPrefab = PrefabUtility.ReplacePrefab(aaaa[i].gameObject, tempPrefab);
//Debug.Log(aaaa[i].name);
PrefabUtility.CreatePrefab("Assets/Resources/Prefab/" + aaaa[i].name + ".prefab" +
"", aaaa[i].gameObject);
//foreach (var item in aaaa)
//{
//}
// Transform tParent = ((GameObject)Selection.activeObject).transform;
//UnityEngine.Object tempPrefab;
// int i = 0;
// foreach (Transform t in tParent)
// {
// tempPrefab = PrefabUtility.CreateEmptyPrefab("Assets/Editor" + t.name + ".prefab");
// tempPrefab = PrefabUtility.ReplacePrefab(t.gameObject, tempPrefab);
// i++;
// }
}
}
}
网友评论