对于我们unity前端程序员来说,UI预制体的是个头疼的问题。总是避免不了和美术进行交流。下面的一套解决方案是通过编写unity编辑期直接将psd文件转生UGUI
#psd文件的读取
这里附上如何读取psd文件的下载链接
百度网盘下载地址
第一次写博客没经验不要见怪
PsdFile psd = new PsdFile(path, Encoding.Default);
foreach (Layer layer in psd.Layers)
{
EditorGUILayout.ToggleLeft(layer.Name, layer.Visible);
}
//这里你将可以取得所有psd文件每个图层的信息。当然包括是否是文件夹,文本和图层
我的psd文件的图层如图:
遍历后可以看出是从尾层级开始,按照类似html标签的形式得到的层级信息。
继续得到layer的更多信息
Layer item = psdFile.Layers[index];
switch (item.groupStatus)
{
case LayerSectionType.Layer:
//图层
break;
case LayerSectionType.OpenFolder:
//文件夹开始
break;
case LayerSectionType.ClosedFolder:
//文件夹关闭
break;
case LayerSectionType.SectionDivider:
//标签结尾
break;
default:
break;
}
此时发现layer的结构类似文件夹和文件之间的树形关系,所以新建一个二叉树结构,node,包含一个父节点许多子节点,并将自身的layer信息保存进去。这样得到的二叉树后对二叉树进行遍历即可。
public class Node
{
public Node parent;
List<Node> children = new List<Node>();
public Layer layer;
int deep { get; set; }
public Node( Node parent = null,Layer layer=null)
{
this.parent = parent;
this.layer = layer;
if (parent!=null)
{
parent.AddChild(this);
}
}
public void AddChild(Node child)
{
if (child == this) return;
child.parent = this;
children.Add(child);
child.deep = deep + 1;
}
}
很显然,我们可以将图层的名字进行特殊的处理,需要将图层转化为button的,我们将名字命名为myBtn@button,通过将字符串用@符号隔离后,我们可以将psd标签化,这样生成的预制体后,如果后续替换资源或者是改动预制体,只需要让美术对psd文件进行位置调整即可。程序不再需要拼预制体。哈哈,程序只需要专注游戏代码了。
后续我会继续完善psd的标签化流程,有时间写博客的话会给大家继续分享。