Ejemplo n.º 1
0
            public static bool ParseAssetBundleData(string configString, out AssetBundleData assetBundleData)
            {
                assetBundleData = null;

                XmlDocument doc = new XmlDocument();
                try
                {
                    doc.LoadXml(configString);
                }
                catch (System.Exception exception)
                {
                    Debug.LogError("Cannot parse config file");
                    return false;
                }

                assetBundleData = new AssetBundleData();

                XmlNode buildAssetBundleNode = doc.SelectSingleNode("buildAssetBundle");
                if (buildAssetBundleNode == null)
                {
                    Debug.LogError("Cannot parse node(buildAssetBundle)");
                    return false;
                }

                // ignoreExtention
                XmlNode ignoreExtentionNode = buildAssetBundleNode.Attributes.GetNamedItem("ignoreExtention");
                if (ignoreExtentionNode != null)
                {
                    string[] blocks = ignoreExtentionNode.Value.Split(';');
                    if (blocks != null && blocks.Length > 0)
                    {
                        assetBundleData.ignoreExtentionList = new List<string>();
                        foreach (string block in blocks)
                        {
                            assetBundleData.ignoreExtentionList.Add(block);
                        }
                    }
                }

                // platform
#if UNITY_EDITOR
                XmlNode platformNode = buildAssetBundleNode.Attributes.GetNamedItem("platform");
                if (platformNode != null)
                {
                    try
                    {
                        assetBundleData.platform = (BuildTarget)System.Enum.Parse(typeof(BuildTarget), platformNode.Value);
                    }
                    catch (System.Exception exception)
                    {
                        Debug.LogError("Cannot parse node(platform)" + ":" + platformNode.Value);
                        return false;
                    }
                }
#endif

                // saveRoot
                XmlNode saveRootNode = doc.SelectSingleNode("buildAssetBundle/saveRoot");
                if (saveRootNode == null)
                {
                    Debug.LogError("Cannot parse node(saveRoot)");
                    return false;
                }
                assetBundleData.saveRoot = saveRootNode.InnerText;

                // asset
                XmlNodeList assetNodeList = doc.SelectNodes("buildAssetBundle/asset");
                if (assetNodeList == null || assetNodeList.Count == 0)
                {
                    Debug.LogError("Nothing asset");
                    return false;
                }
                assetBundleData.assetDataMap = new Dictionary<string, AssetData>();
                foreach (XmlNode assetNode in assetNodeList)
                {
                    AssetData assetData = new AssetData();
                    assetData.enabled = true;
                    assetData.itemDataCollectionList = new List<ItemDataCollection>();

                    // id
                    XmlNode idNode = assetNode.Attributes.GetNamedItem("id");
                    if (idNode == null)
                    {
                        Debug.LogError("Missing asset id");
                        return false;
                    }
                    if (assetBundleData.assetDataMap.ContainsKey(idNode.Value))
                    {
                        Debug.LogError("Repeated id:" + idNode.Value);
                        return false;
                    }
                    if (string.IsNullOrEmpty(idNode.Value))
                    {
                        Debug.LogError("Missing asset id:" + idNode.Value);
                        return false;
                    }
                    assetData.id = idNode.Value;
                    assetBundleData.assetDataMap.Add(assetData.id, assetData);

                    // dependence
                    XmlNode dependenceNode = assetNode.Attributes.GetNamedItem("dependence");
                    if (dependenceNode != null)
                    {
                        assetData.dependence = dependenceNode.Value;
                    }

                    // item
                    XmlNodeList itemNodeList = assetNode.SelectNodes("item");
                    if (itemNodeList != null && itemNodeList.Count > 0)
                    {
                        foreach (XmlNode itemNode in itemNodeList)
                        {
                            ItemDataCollection itemDataCollection = new ItemDataCollection();
                            assetData.itemDataCollectionList.Add(itemDataCollection);
                            itemDataCollection.bind = false;
                            itemDataCollection.itemDataList = new List<ItemData>();

                            ItemData itemData = null;
                            if (!ParseItemNode(itemNode, assetData.id, out itemData))
                            {
                                return false;
                            }
                            itemDataCollection.itemDataList.Add(itemData);
                        }
                    }

                    // bind
                    XmlNodeList bindNodeList = assetNode.SelectNodes("bind");
                    if (bindNodeList != null)
                    {
                        foreach (XmlNode bindNode in bindNodeList)
                        {
                            ItemDataCollection itemDataCollection = new ItemDataCollection();
                            assetData.itemDataCollectionList.Add(itemDataCollection);
                            itemDataCollection.bind = true;
                            itemDataCollection.itemDataList = new List<ItemData>();

                            // savePath
                            XmlNode savePathNode = bindNode.Attributes.GetNamedItem("savePath");
                            if (savePathNode == null)
                            {
                                Debug.LogError("Cannot parse node(bind.savePath)" + ":" + assetData.id);
                                return false;
                            }
                            itemDataCollection.savePath = savePathNode.Value;

                            // item
                            XmlNodeList itemNodeList2 = bindNode.SelectNodes("item");
                            if (itemNodeList2 != null && itemNodeList2.Count > 0)
                            {
                                foreach (XmlNode itemNode in itemNodeList2)
                                {
                                    ItemData itemData = null;
                                    if (!ParseItemNode(itemNode, assetData.id, out itemData))
                                    {
                                        return false;
                                    }
                                    itemDataCollection.itemDataList.Add(itemData);
                                }
                            }

                            // empty test
                            if (itemDataCollection.IsEmpty())
                            {
                                Debug.LogWarning("Empty asset config:" + assetData.id);
                            }
                        }
                    }

                    // empty test
                    if (assetData.IsEmpty())
                    {
                        Debug.LogWarning("Empty asset config:" + assetData.id);
                    }
                }

                return true;
            }
Ejemplo n.º 2
0
            public static bool ParseAssetBundleData(string configString, out AssetBundleData assetBundleData)
            {
                assetBundleData = null;

                XmlDocument doc = new XmlDocument();

                try
                {
                    doc.LoadXml(configString);
                }
                catch (System.Exception exception)
                {
                    Debug.LogError("Cannot parse config file");
                    return(false);
                }

                assetBundleData = new AssetBundleData();

                XmlNode buildAssetBundleNode = doc.SelectSingleNode("buildAssetBundle");

                if (buildAssetBundleNode == null)
                {
                    Debug.LogError("Cannot parse node(buildAssetBundle)");
                    return(false);
                }

                // ignoreExtention
                XmlNode ignoreExtentionNode = buildAssetBundleNode.Attributes.GetNamedItem("ignoreExtention");

                if (ignoreExtentionNode != null)
                {
                    string[] blocks = ignoreExtentionNode.Value.Split(';');
                    if (blocks != null && blocks.Length > 0)
                    {
                        assetBundleData.ignoreExtentionList = new List <string>();
                        foreach (string block in blocks)
                        {
                            assetBundleData.ignoreExtentionList.Add(block);
                        }
                    }
                }

                // platform
#if UNITY_EDITOR
                XmlNode platformNode = buildAssetBundleNode.Attributes.GetNamedItem("platform");
                if (platformNode != null)
                {
                    try
                    {
                        assetBundleData.platform = (BuildTarget)System.Enum.Parse(typeof(BuildTarget), platformNode.Value);
                    }
                    catch (System.Exception exception)
                    {
                        Debug.LogError("Cannot parse node(platform)" + ":" + platformNode.Value);
                        return(false);
                    }
                }
#endif

                // saveRoot
                XmlNode saveRootNode = doc.SelectSingleNode("buildAssetBundle/saveRoot");
                if (saveRootNode == null)
                {
                    Debug.LogError("Cannot parse node(saveRoot)");
                    return(false);
                }
                assetBundleData.saveRoot = saveRootNode.InnerText;

                // asset
                XmlNodeList assetNodeList = doc.SelectNodes("buildAssetBundle/asset");
                if (assetNodeList == null || assetNodeList.Count == 0)
                {
                    Debug.LogError("Nothing asset");
                    return(false);
                }
                assetBundleData.assetDataMap = new Dictionary <string, AssetData>();
                foreach (XmlNode assetNode in assetNodeList)
                {
                    AssetData assetData = new AssetData();
                    assetData.enabled = true;
                    assetData.itemDataCollectionList = new List <ItemDataCollection>();

                    // id
                    XmlNode idNode = assetNode.Attributes.GetNamedItem("id");
                    if (idNode == null)
                    {
                        Debug.LogError("Missing asset id");
                        return(false);
                    }
                    if (assetBundleData.assetDataMap.ContainsKey(idNode.Value))
                    {
                        Debug.LogError("Repeated id:" + idNode.Value);
                        return(false);
                    }
                    if (string.IsNullOrEmpty(idNode.Value))
                    {
                        Debug.LogError("Missing asset id:" + idNode.Value);
                        return(false);
                    }
                    assetData.id = idNode.Value;
                    assetBundleData.assetDataMap.Add(assetData.id, assetData);

                    // dependence
                    XmlNode dependenceNode = assetNode.Attributes.GetNamedItem("dependence");
                    if (dependenceNode != null)
                    {
                        assetData.dependence = dependenceNode.Value;
                    }

                    // item
                    XmlNodeList itemNodeList = assetNode.SelectNodes("item");
                    if (itemNodeList != null && itemNodeList.Count > 0)
                    {
                        foreach (XmlNode itemNode in itemNodeList)
                        {
                            ItemDataCollection itemDataCollection = new ItemDataCollection();
                            assetData.itemDataCollectionList.Add(itemDataCollection);
                            itemDataCollection.bind         = false;
                            itemDataCollection.itemDataList = new List <ItemData>();

                            ItemData itemData = null;
                            if (!ParseItemNode(itemNode, assetData.id, out itemData))
                            {
                                return(false);
                            }
                            itemDataCollection.itemDataList.Add(itemData);
                        }
                    }

                    // bind
                    XmlNodeList bindNodeList = assetNode.SelectNodes("bind");
                    if (bindNodeList != null)
                    {
                        foreach (XmlNode bindNode in bindNodeList)
                        {
                            ItemDataCollection itemDataCollection = new ItemDataCollection();
                            assetData.itemDataCollectionList.Add(itemDataCollection);
                            itemDataCollection.bind         = true;
                            itemDataCollection.itemDataList = new List <ItemData>();

                            // savePath
                            XmlNode savePathNode = bindNode.Attributes.GetNamedItem("savePath");
                            if (savePathNode == null)
                            {
                                Debug.LogError("Cannot parse node(bind.savePath)" + ":" + assetData.id);
                                return(false);
                            }
                            itemDataCollection.savePath = savePathNode.Value;

                            // item
                            XmlNodeList itemNodeList2 = bindNode.SelectNodes("item");
                            if (itemNodeList2 != null && itemNodeList2.Count > 0)
                            {
                                foreach (XmlNode itemNode in itemNodeList2)
                                {
                                    ItemData itemData = null;
                                    if (!ParseItemNode(itemNode, assetData.id, out itemData))
                                    {
                                        return(false);
                                    }
                                    itemDataCollection.itemDataList.Add(itemData);
                                }
                            }

                            // empty test
                            if (itemDataCollection.IsEmpty())
                            {
                                Debug.LogWarning("Empty asset config:" + assetData.id);
                            }
                        }
                    }

                    // empty test
                    if (assetData.IsEmpty())
                    {
                        Debug.LogWarning("Empty asset config:" + assetData.id);
                    }
                }

                return(true);
            }