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($"导入配置完毕!"); }