unity开发笔记(从psd文件直接生成UGUI)

对于我们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的标签化流程,有时间写博客的话会给大家继续分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值