public void OnDestroy()
        {
            // 注意:清空所有撤销操作
            Undo.ClearAll();

            if (AssetBundleCollectorSettingData.IsDirty)
            {
                AssetBundleCollectorSettingData.SaveFile();
            }
        }
        /// <summary>
        /// 导入XML配置表
        /// </summary>
        public static void ImportXmlConfig(string filePath)
        {
            if (File.Exists(filePath) == false)
            {
                throw new FileNotFoundException(filePath);
            }

            if (Path.GetExtension(filePath) != ".xml")
            {
                throw new Exception($"Only support xml : {filePath}");
            }

            // 加载配置文件
            XmlDocument xml = new XmlDocument();

            xml.Load(filePath);
            XmlElement root = xml.DocumentElement;

            // 读取配置版本
            string configVersion = root.GetAttribute(XmlVersion);

            if (configVersion != ConfigVersion)
            {
                throw new Exception($"The config version is invalid : {configVersion}");
            }

            // 读取公共配置
            bool   enableAddressable  = false;
            bool   autoCollectShaders = false;
            string shaderBundleName   = string.Empty;
            var    commonNodeList     = root.GetElementsByTagName(XmlCommon);

            if (commonNodeList.Count > 0)
            {
                XmlElement commonElement = commonNodeList[0] as XmlElement;
                if (commonElement.HasAttribute(XmlEnableAddressable) == false)
                {
                    throw new Exception($"Not found attribute {XmlEnableAddressable} in {XmlCommon}");
                }
                if (commonElement.HasAttribute(XmlAutoCollectShader) == false)
                {
                    throw new Exception($"Not found attribute {XmlAutoCollectShader} in {XmlCommon}");
                }
                if (commonElement.HasAttribute(XmlShaderBundleName) == false)
                {
                    throw new Exception($"Not found attribute {XmlShaderBundleName} in {XmlCommon}");
                }

                enableAddressable  = commonElement.GetAttribute(XmlEnableAddressable) == "True" ? true : false;
                autoCollectShaders = commonElement.GetAttribute(XmlAutoCollectShader) == "True" ? true : false;
                shaderBundleName   = commonElement.GetAttribute(XmlShaderBundleName);
            }

            // 读取分组配置
            List <AssetBundleCollectorGroup> groupTemper = new List <AssetBundleCollectorGroup>();
            var groupNodeList = root.GetElementsByTagName(XmlGroup);

            foreach (var groupNode in groupNodeList)
            {
                XmlElement groupElement = groupNode as XmlElement;
                if (groupElement.HasAttribute(XmlGroupName) == false)
                {
                    throw new Exception($"Not found attribute {XmlGroupName} in {XmlGroup}");
                }
                if (groupElement.HasAttribute(XmlGroupDesc) == false)
                {
                    throw new Exception($"Not found attribute {XmlGroupDesc} in {XmlGroup}");
                }
                if (groupElement.HasAttribute(XmlAssetTags) == false)
                {
                    throw new Exception($"Not found attribute {XmlAssetTags} in {XmlGroup}");
                }

                AssetBundleCollectorGroup group = new AssetBundleCollectorGroup();
                group.GroupName = groupElement.GetAttribute(XmlGroupName);
                group.GroupDesc = groupElement.GetAttribute(XmlGroupDesc);
                group.AssetTags = groupElement.GetAttribute(XmlAssetTags);
                groupTemper.Add(group);

                // 读取收集器配置
                var collectorNodeList = groupElement.GetElementsByTagName(XmlCollector);
                foreach (var collectorNode in collectorNodeList)
                {
                    XmlElement collectorElement = collectorNode as XmlElement;
                    if (collectorElement.HasAttribute(XmlCollectPath) == false)
                    {
                        throw new Exception($"Not found attribute {XmlCollectPath} in {XmlCollector}");
                    }
                    if (collectorElement.HasAttribute(XmlCollectorType) == false)
                    {
                        throw new Exception($"Not found attribute {XmlCollectorType} in {XmlCollector}");
                    }
                    if (collectorElement.HasAttribute(XmlAddressRule) == false)
                    {
                        throw new Exception($"Not found attribute {XmlAddressRule} in {XmlCollector}");
                    }
                    if (collectorElement.HasAttribute(XmlPackRule) == false)
                    {
                        throw new Exception($"Not found attribute {XmlPackRule} in {XmlCollector}");
                    }
                    if (collectorElement.HasAttribute(XmlFilterRule) == false)
                    {
                        throw new Exception($"Not found attribute {XmlFilterRule} in {XmlCollector}");
                    }
                    if (collectorElement.HasAttribute(XmlAssetTags) == false)
                    {
                        throw new Exception($"Not found attribute {XmlAssetTags} in {XmlCollector}");
                    }

                    AssetBundleCollector collector = new AssetBundleCollector();
                    collector.CollectPath     = collectorElement.GetAttribute(XmlCollectPath);
                    collector.CollectorType   = StringUtility.NameToEnum <ECollectorType>(collectorElement.GetAttribute(XmlCollectorType));
                    collector.AddressRuleName = collectorElement.GetAttribute(XmlAddressRule);
                    collector.PackRuleName    = collectorElement.GetAttribute(XmlPackRule);
                    collector.FilterRuleName  = collectorElement.GetAttribute(XmlFilterRule);
                    collector.AssetTags       = collectorElement.GetAttribute(XmlAssetTags);;
                    group.Collectors.Add(collector);
                }
            }

            // 保存配置数据
            AssetBundleCollectorSettingData.ClearAll();
            AssetBundleCollectorSettingData.Setting.EnableAddressable  = enableAddressable;
            AssetBundleCollectorSettingData.Setting.AutoCollectShaders = autoCollectShaders;
            AssetBundleCollectorSettingData.Setting.ShadersBundleName  = shaderBundleName;
            AssetBundleCollectorSettingData.Setting.Groups.AddRange(groupTemper);
            AssetBundleCollectorSettingData.SaveFile();
            Debug.Log($"导入配置完毕!");
        }