Пример #1
0
    //create map material name -> bundle
    //example: female_face-1 --> female_face-1.assetbundle
    static void CreateElementDataBaseBundle()
    {
        List <CharacterElement> characterElements = new List <CharacterElement>();

        string[] assetBundles = Directory.GetFiles(AssetBundlePath);
        string[] materials    = Directory.GetFiles("Assets/CharacterCustomization/characters", "*.mat", SearchOption.AllDirectories);       //search materials recursively
        foreach (var material in materials)
        {
            foreach (var bundle in assetBundles)
            {
                FileInfo bundleFI   = new FileInfo(bundle);
                FileInfo materialFI = new FileInfo(material);
                string   bundleName = bundleFI.Name.Replace(CharacterElement.BundlePostfix, "");

                if (!materialFI.Name.StartsWith(bundleName) ||
                    !material.Contains("Per Texture Materials"))
                {
                    continue;
                }

                string name = materialFI.Name.Replace(".mat", "");
                characterElements.Add(new CharacterElement(name, bundleName));
                break;
            }
        }

        CharacterElementHolder holder = ScriptableObject.CreateInstance <CharacterElementHolder>();

        holder.content = characterElements;
        string path = AssetPath + CharacterElement.AssetFileName(CharacterElement.DataBaseName);

        AssetDatabase.CreateAsset(holder, path);
        Object asset = AssetDatabase.LoadAssetAtPath(path, typeof(CharacterElementHolder));

        BuildPipeline.BuildAssetBundle(asset, null, AssetBundlePath + CharacterElement.BundleFileName(CharacterElement.DataBaseName));
    }