需要注意的地方:路径是要相对路径而不是绝对路径,也就是以"Assets/"开头的路径
首先先判断需要生成预设体的物体的路径是否存在:
if (!Directory.Exists(animDir))
{
return;
}
在判断一下预设体生成的路径是否存在,如果不存在就创建一个:
if (!Directory.Exists(outDir))
{
Directory.CreateDirectory(outDir);
}
private static void makePrefab(string p, string dir, string gunFbxPach)
{
string path = p + p.Replace(dir, "") + ".prefab";
if (gunFbxPach == null)
{
return;
}
GameObject model = AssetDatabase.LoadAssetAtPath<GameObject>(gunFbxPach);
setPrefab(path, model);
}
private static void setPrefab(string path, GameObject obj)
{
makeParentDirExist(path);
UnityEngine.Object prefab = PrefabUtility.CreateEmptyPrefab(path);
PrefabUtility.ReplacePrefab(obj, prefab, ReplacePrefabOptions.ConnectToPrefab);
}
private static void makeParentDirExist(string path)
{
string pDir = getParentPath(path);
if (!AssetDatabase.IsValidFolder(pDir))
{
makeParentDirExist(pDir);
AssetDatabase.CreateFolder(getParentPath(pDir), getParentName(path));
AssetDatabase.Refresh();
}
else
{
return;
}
}
private static string getParentPath(string path, char splitFlag = '/')
{
string[] dirs = path.Split(splitFlag);
System.Text.StringBuilder str = new System.Text.StringBuilder();
for (int i = 0; i < dirs.Length - 1; ++i)
{
str.Append(dirs[i]).Append(splitFlag);
}
//cut down the last splitFlag
string result = str.ToString();
if (result.EndsWith(splitFlag.ToString()))
{
result = result.Substring(0, result.Length - 1);
}
return result;
}
最后调用就行了
string GunPath = "Assets/NewModels/Weapon"
string dir= "Assets/NewModels/Weapon/wap"
string gunFbxPach= "Assets/NewModels/Weapon/AWP\AWP.FBX" // 要生成预设体的物体
makePrefab(dir, GunPath, gunFbxPach);