public static void Execute()
    {
        List <CharacterElement> characterElements = new List <CharacterElement>();

        // As a CharacterElement needs the name of the assetbundle
        // that contains its assets, we go through all assetbundles
        // to match them to the materials we find.
        string[] assetbundles = Directory.GetFiles(CreateAssetbundles.AssetbundlePath);
        string[] materials    = Directory.GetFiles("Assets/CharacterCustomization/characters", "*.mat", SearchOption.AllDirectories);
        foreach (string material in materials)
        {
            foreach (string bundle in assetbundles)
            {
                FileInfo bundleFI   = new FileInfo(bundle);
                FileInfo materialFI = new FileInfo(material);
                string   bundleName = bundleFI.Name.Replace(".assetbundle", "");
                if (!materialFI.Name.StartsWith(bundleName))
                {
                    continue;
                }
                if (!material.Contains("Per Texture Materials"))
                {
                    continue;
                }
                characterElements.Add(new CharacterElement(materialFI.Name.Replace(".mat", ""), bundleFI.Name));
                break;
            }
        }

        // After collecting all CharacterElements we store them in an
        // assetbundle using a ScriptableObject.

        // Create a ScriptableObject that contains the list of CharacterElements.
        CharacterElementHolder t = ScriptableObject.CreateInstance <CharacterElementHolder> ();

        t.content = characterElements;

        // Save the ScriptableObject and load the resulting asset so it can
        // be added to an assetbundle.
        string p = "Assets/characterelementdatabase.asset";

        AssetDatabase.CreateAsset(t, p);
        Object o = AssetDatabase.LoadAssetAtPath(p, typeof(CharacterElementHolder));

        AssetBundleBuild[] buildInfo = new AssetBundleBuild[1];
        buildInfo[0].assetBundleName = "characterelementdatabase.assetbundle";
        buildInfo[0].assetNames      = new string[1];
        buildInfo[0].assetNames[0]   = p;

        BuildPipeline.BuildAssetBundles(CreateAssetbundles.AssetbundlePath, buildInfo, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);

        // Build the CharacterElementDatabase assetbundle.
        //BuildPipeline.BuildAssetBundle(o, null, CreateAssetbundles.AssetbundlePath + "CharacterElementDatabase.assetbundle");

        // Delete the ScriptableObject.
        AssetDatabase.DeleteAsset(p);

        Debug.Log("******* Updated Character Element Database, added " + characterElements.Count + " elements *******");
    }
Esempio n. 2
0
    // This method downloads the CharacterElementDatabase assetbundle and populates
    // the sortedElements Dictionary from the contents. This is done at runtime as
    // ScriptableObjects do not support Dictionaries. ReadyToUse must be true before
    // you create an instance of CharacterGenerator.
    public static IEnumerator ReadyToUse()
    {
        if (database == null)
        {
            database = WWW.LoadFromCacheOrDownload(AssetbundleBaseURL + "CharacterElementDatabase.assetbundle", GameDefines.AssetBundleVersion);
            yield return(database);
        }


        if (sortedElements != null)
        {
            yield break;
        }
        else
        {
            //if (!database.isDone) return false;
            if (database.assetBundle == null)
            {
                yield return(0);
            }


            CharacterElementHolder ceh = (CharacterElementHolder)database.assetBundle.mainAsset;


            sortedElements = new Dictionary <string, Dictionary <string, CharacterElement> >();
            foreach (CharacterElement element in ceh.content)
            {
                string[] a         = element.bundleName.Split('_');
                string   character = a[0];
                string   category  = a[1].Split('-')[0].Replace(".assetbundle", "");

                if (!availableCharacters.Contains(character))
                {
                    availableCharacters.Add(character);
                }

                if (!sortedElements.ContainsKey(character))
                {
                    sortedElements.Add(character, new Dictionary <string, CharacterElement>());
                }

                if (!sortedElements[character].ContainsKey(category))
                {
                    sortedElements[character].Add(category, element);
                }
            }
            yield return(0);
        }
        yield break;
    }
    public static void Execute()
    {
        List<CharacterElement> characterElements = new List<CharacterElement>();

        // As a CharacterElement needs the name of the assetbundle
        // that contains its assets, we go through all assetbundles
        // to match them to the materials we find.
        string[] assetbundles = Directory.GetFiles(CreateAssetbundles.AssetbundlePath);
        string[] materials = Directory.GetFiles("Assets/characters", "*.mat", SearchOption.AllDirectories);
        foreach (string material in materials)
        {
            foreach (string bundle in assetbundles)
            {
                FileInfo bundleFI = new FileInfo(bundle);
                FileInfo materialFI = new FileInfo(material);
                string bundleName = bundleFI.Name.Replace(".assetbundle", "");
                if (!materialFI.Name.StartsWith(bundleName)) continue;
                if (!material.Contains("Per Texture Materials")) continue;
                characterElements.Add(new CharacterElement(materialFI.Name.Replace(".mat", ""), bundleFI.Name));
                break;
            }
        }

        // After collecting all CharacterElements we store them in an
        // assetbundle using a ScriptableObject.

        // Create a ScriptableObject that contains the list of CharacterElements.
        CharacterElementHolder t = new CharacterElementHolder(characterElements);

        // Save the ScriptableObject and load the resulting asset so it can
        // be added to an assetbundle.
        string p = "Assets/CharacterElementDatabase.asset";
        AssetDatabase.CreateAsset(t, p);
        Object o = AssetDatabase.LoadAssetAtPath(p, typeof(CharacterElementHolder));

        // Build the CharacterElementDatabase assetbundle.
        BuildPipeline.BuildAssetBundle(o, null, CreateAssetbundles.AssetbundlePath + "CharacterElementDatabase.assetbundle");

        // Delete the ScriptableObject.
        AssetDatabase.DeleteAsset(p);

        Debug.Log("******* Updated Character Element Database, added " + characterElements.Count + " elements *******");
    }
Esempio n. 4
0
    static void CreateElementDatabaseBundles()
    {
        List <CharacterElement> characterElements = new List <CharacterElement>();

        string[] assetbundles = Directory.GetFiles(AssetbundlePath);
        string[] materials    = Directory.GetFiles("Assets/CharacterCustomization/characters", "*.mat", SearchOption.AllDirectories);
        foreach (string material in materials)
        {
            foreach (string bundle in assetbundles)
            {
                FileInfo bundleFI   = new FileInfo(bundle);
                FileInfo materialFI = new FileInfo(material);
                string   bundleName = bundleFI.Name.Replace(".assetbundle", "");
                if (!materialFI.Name.StartsWith(bundleName))
                {
                    continue;
                }
                if (!material.Contains("Per Texture Materials"))
                {
                    continue;
                }
                characterElements.Add(new CharacterElement(materialFI.Name.Replace(".mat", ""), bundleFI.Name));
                break;
            }
        }

        Debug.Log(characterElements.Count);

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

        t.content = characterElements;

        string p = "Assets/CharacterElementDatabase.asset";

        AssetDatabase.CreateAsset(t, p);
        Object o = AssetDatabase.LoadAssetAtPath(p, typeof(CharacterElementHolder));

        BuildPipeline.BuildAssetBundle(o, null, AssetbundlePath + "CharacterElementDatabase.assetbundle");
        AssetDatabase.DeleteAsset(p);
    }
Esempio n. 5
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));
    }