工具类:生成预设体

需要注意的地方:路径是要相对路径而不是绝对路径,也就是以"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);

猜你喜欢

转载自blog.csdn.net/Marccco/article/details/87077828