unity psb文件生成UI

1.先将psd文件存储为psb文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.在Unity中导入 2D PSD Importer 插件和psb文件

在这里插入图片描述
在这里插入图片描述

3.创建转换的代码,放入Editor文件夹

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.UI;

public class CreatePsbUI : EditorWindow {
    
    

    [MenuItem("Tools/创建PsbUI", false, 24)]
    private static void ShowWindow() {
    
    
        var window = GetWindow<CreatePsbUI>();
        window.titleContent = new GUIContent("创建PsbUI");
        window.Show();
    }

    private string preName;
    private void OnGUI()
    {
    
    
        preName = GUILayout.TextField(preName, GUILayout.Height(20));
        if (GUILayout.Button("生成UI") && !string.IsNullOrEmpty(preName))
        {
    
    
            RectTransform par = GameObject.Find(preName).AddComponent<RectTransform>();

            for (int i = 0; i < par.childCount; i++)
            {
    
    

                RectTransform rect = par.GetChild(i).gameObject.AddComponent<RectTransform>();

                SpriteRenderer spriteRenderer=par.GetChild(i).GetComponent<SpriteRenderer>();

                par.GetChild(i).gameObject.AddComponent<Image>().sprite = spriteRenderer.sprite;

                GameObject.DestroyImmediate(spriteRenderer);

                rect.sizeDelta = rect.sizeDelta * 100;
                rect.anchoredPosition = rect.anchoredPosition * 100;
            }
        }
    }
}


4.连续步骤

1.将psb文件拖入面板中
在这里插入图片描述
2.创建它的原始预制体,这样才能改变它的组件
在这里插入图片描述
在这里插入图片描述
3.解压缩该预制体,这样才能在面板中修改组件
在这里插入图片描述
4.打开刚刚的代码编写的编辑器并输入预制体的名称并点击按钮
在这里插入图片描述
5.这样就能得到一个完整的UI了
在这里插入图片描述

5.看这里

上面的虽然可以用,但是图多的话也很麻烦。
所以有了新方法: 大佬的方法https://zhuanlan.zhihu.com/p/134136125
看大佬的方法我自己修改了点东西,在PSDImporter代码中OnProducePrefab方法最后一段添加

 //修改为UI

            RectTransform par = root.AddComponent<RectTransform>();

            float x = 100;//图片的比例 决定生成的UI的大小,这个得自己调整,一般是100,可能也有其他的
            float y = 100;
            for (int i = 0; i < par.childCount; i++)
            {
    
    

                RectTransform rect = par.GetChild(i).gameObject.AddComponent<RectTransform>();

                SpriteRenderer spriteRenderer = par.GetChild(i).GetComponent<SpriteRenderer>();

                par.GetChild(i).gameObject.AddComponent<Image>().sprite = spriteRenderer.sprite;

                GameObject.DestroyImmediate(spriteRenderer);
                
                rect.sizeDelta = new Vector2(rect.sizeDelta.x * x, rect.sizeDelta.y * y);
                rect.anchoredPosition =
                new Vector2(rect.anchoredPosition.x * x, rect.anchoredPosition.y * y);
            
            }

            return root;

猜你喜欢

转载自blog.csdn.net/LightHuiHui/article/details/125201054