Exemplo n.º 1
0
    /// <summary>
    /// 打包资源为AssetBundle
    /// </summary>
    private static void BuildResource()
    {
        AssetDatabase.Refresh();
        int maxLevel = allLevelAssets.Count;

        if (maxLevel == 0)
        {
            return;
        }
        for (int level = 1; level <= maxLevel; level++)
        {
            BuildPipeline.PushAssetDependencies();
            Dictionary <string, AssetUnit> levelAssets = allLevelAssets[level];
            foreach (var pair in levelAssets)
            {
                UnityEngine.Object asset    = AssetDatabase.LoadMainAssetAtPath(pair.Value.mPath);
                string             savePath = "";
                pair.Value.mName = BuildCommon.GetLevelABPathName(pair.Value.mPath);
                if (null == asset)
                {
                    Debug.LogError("Load :" + pair.Value.mPath + "failed");
                }
                Debug.Log(pair.Value.mSuffix);
                if (pair.Value.mSuffix.Equals("shader"))
                {
                    savePath         = "Assets/bin/data/shader/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                    pair.Value.mPath = "data/shader/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                }
                else if (pair.Value.mSuffix.Equals("mat"))
                {
                    savePath         = "Assets/bin/data/atlas/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                    pair.Value.mPath = "data/atlas/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                }
                else if (pair.Value.mSuffix.Equals("prefab"))
                {
                    if (pair.Value.mName.Contains("atla"))
                    {
                        savePath         = "Assets/bin/data/atlas/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                        pair.Value.mPath = "data/atlas/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                    }
                    else
                    {
                        savePath         = "Assets/bin/data/ui/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                        pair.Value.mPath = "data/ui/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                    }
                }
                else if (pair.Value.mSuffix.Equals("ttf"))
                {
                    savePath         = "Assets/bin/data/font/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                    pair.Value.mPath = "data/font/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                }
                else if (pair.Value.mSuffix.Equals("png") || pair.Value.mSuffix.Equals("psd") || pair.Value.mSuffix.Equals("dds"))
                {
                    savePath         = "Assets/bin/data/texture/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                    pair.Value.mPath = "data/texture/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                }
                else if (pair.Value.mSuffix.Equals("mp4"))
                {
                    savePath         = "Assets/bin/data/audio/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                    pair.Value.mPath = "data/audio/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                }
                else if (pair.Value.mSuffix.Equals("unity"))
                {
                    //pair.Value.mPath = "data/scene/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                    savePath = "Assets/bin/data/scene/" + BuildCommon.GetLevelABPath(pair.Value.mPath);
                }
                BuildCommon.CheckFolder(BuildCommon.getPath(savePath));
                //普通资源
                if (pair.Value.mSuffix != "unity")
                {
                    string assetName = pair.Value.mPath.Replace("Assets/", "");
                    uint   ver;
                    if (!BuildPipeline.BuildAssetBundle(asset, null, savePath, out ver, options, buildPlatform))
                    {
                        Debug.LogError("Build Assetbundle:" + savePath + " Failed");
                    }
                }
                //场景资源
                else
                {
                    AssetDatabase.Refresh();
                    BuildPipeline.PushAssetDependencies();
                    string error = BuildPipeline.BuildStreamedSceneAssetBundle(new string[] { pair.Value.mPath }, savePath, buildPlatform);
                    if (!string.IsNullOrEmpty(error))
                    {
                        Debug.LogError(error);
                    }
                    BuildPipeline.PopAssetDependencies();
                }
            }
        }
        for (int level = 1; level <= maxLevel; level++)
        {
            BuildPipeline.PopAssetDependencies();
        }
    }