Beispiel #1
0
 public static List <AssetBundleBuild> CollectABBuilds(UabConfigGroup cfggrp)
 {
     if (cfggrp.uabcount > 0)
     {
         return(collectABBuilds_Group(cfggrp));
     }
     else
     {
         return(collectABBuilds_Single(cfggrp));
     }
 }
Beispiel #2
0
    public static string[] collectFiles(UabConfigGroup group)
    {
        List <string> allfiles = new List <string>();

        string[] arrpath = group.realassetpath.Split(',');
        foreach (var realpath in arrpath)
        {
            if (!Directory.Exists(realpath))
            {
                continue;
            }
            SearchOption op = group.onlytop ? SearchOption.TopDirectoryOnly : SearchOption.AllDirectories;

            //var files = Directory.GetFiles(realpath, "*.*", op).ToList();
            //files = (from f in files
            //         where
            //         (File.GetAttributes(f) & FileAttributes.Hidden) != FileAttributes.Hidden &&
            //         Path.GetExtension(f) != ".meta"
            //         select f.Replace('\\', '/')).ToList();
            //if (!string.IsNullOrEmpty(group.extensions))
            //{
            //    string[] splits = group.extensions.Split(',');
            //    files = files.Where(f => splits.Contains(Path.GetExtension(f))).ToList();
            //}
            //allfiles.AddRange(files);


            string[] wantpath = collectDirPath(realpath, group.dirsearchlayer);

            if (wantpath == null)
            {
                continue;
            }

            for (int i = 0; i < wantpath.Length; i++)
            {
                var files = Directory.GetFiles(wantpath[i], "*.*", op).ToList();
                files = (from f in files
                         where
                         (File.GetAttributes(f) & FileAttributes.Hidden) != FileAttributes.Hidden &&
                         Path.GetExtension(f) != ".meta"
                         select f.Replace('\\', '/')).ToList();
                if (!string.IsNullOrEmpty(group.extensions))
                {
                    string[] splits = group.extensions.Split(',');
                    files = files.Where(f => splits.Contains(Path.GetExtension(f))).ToList();
                }
                allfiles.AddRange(files);
            }
        }

        return(allfiles.ToArray());
    }
Beispiel #3
0
    private static List <AssetBundleBuild> collectABBuilds_Single(UabConfigGroup cfggrp)
    {
        List <AssetBundleBuild> abbuilds = new List <AssetBundleBuild>();

        string[] files = collectFiles(cfggrp);
        for (int i = 0; i < files.Length; i++)
        {
            string           filename = Path.GetFileNameWithoutExtension(files[i]);
            AssetBundleBuild abbuild  = new AssetBundleBuild();
            abbuild.assetBundleName = string.Format("{0}_{1}", cfggrp.name, filename);//, UabDef.UAB_EXT);
            abbuild.assetNames      = new string[] { files[i] };
            //AssetImporter.GetAtPath(files[i]).assetBundleName = abbuild.assetBundleName;

            abbuilds.Add(abbuild);
        }

        return(abbuilds);
    }
Beispiel #4
0
    private static List <AssetBundleBuild> collectABBuilds_Group(UabConfigGroup cfggrp)
    {
        Dictionary <int, List <string> > map = new Dictionary <int, List <string> >();

        string[] files = collectFiles(cfggrp);
        for (int i = 0; i < files.Length; i++)
        {
            if (cfggrp.resourceasset)
            {
                if (!UabBuild.neededRes.Contains(files[i]))
                {
                    continue;
                }
            }

            string        loadpath = getAssetLoadPath(files[i], cfggrp.loadpath);
            int           hash     = UabHash.BkdrHash(loadpath.ToLower());
            int           abidx    = hash % cfggrp.uabcount;
            List <string> l;
            if (!map.TryGetValue(abidx, out l))
            {
                l          = new List <string>();
                map[abidx] = l;
            }
            l.Add(files[i]);
        }

        List <AssetBundleBuild> abbuilds = new List <AssetBundleBuild>();

        foreach (var kvp in map)
        {
            AssetBundleBuild abbuild = new AssetBundleBuild();
            abbuild.assetBundleName = getSplitBundleName(cfggrp.name, kvp.Key);
            abbuild.assetNames      = kvp.Value.ToArray();
            for (int i = 0; i < abbuild.assetNames.Length; i++)
            {
                //AssetImporter.GetAtPath(abbuild.assetNames[i]).assetBundleName = abbuild.assetBundleName;
            }
            abbuilds.Add(abbuild);
        }

        return(abbuilds);
    }