//生成psd元素列表 private void GenerateElementMap(ref Dictionary<string, PsdElement> map, string parentName, IPsdLayer[] layers) { if (layers == null) return; foreach (var layer in layers) { var layerName = parentName + "-" + layer.Name.Replace(" ", ""); var elementName = layerName; //解析为PsdElement //正则获取后缀与名字 var suffixRegex = "(?<=@).+"; var nameRegex = ".+(?=@)"; var suffix = ""; var name = elementName; if (Regex.IsMatch(elementName, suffixRegex)) { suffix = Regex.Match(elementName, suffixRegex).ToString(); name = Regex.Match(elementName, nameRegex).ToString(); } if (suffix == "@") continue; var type = P2UUtil.GetTypeBySuffix(suffix, layer.HasImage); if (type == PsdElement.ElementType.Null) { Debug.LogError(elementName + "后缀使用错误"); P2UUtil.AddError(elementName + "后缀使用错误"); continue; } //添加子项 var childs = layer.Childs; PsdElement element = P2UUtil.GetPsdElement(name, layer, type, childs); if (!map.ContainsKey(element.name)) { if (type != PsdElement.ElementType.Group) map.Add(name, element); } else { string error = "图层命名重复:" + layerName; error = error.Replace("-", "/"); P2UUtil.ShowError(error); Debug.LogError("图层命名重复:" + layerName); } if (element.type == PsdElement.ElementType.Group) GenerateElementMap(ref map, layerName, layer.Childs); } P2UUtil.ShowError(); P2UUtil.ClearError(); }