Unity 图文混排 生成SpriteAsset

时间:2021-6-4 作者:qvyue

生成Sprite Asset

  1. TexturePacker 生成json、png
Unity 图文混排 生成SpriteAsset
image.png
  1. TexturePacker 生成 tpsheet、png
Unity 图文混排 生成SpriteAsset
image.png
  1. 生成文件对比 json与 tpsheet,最终tpsheet中位置和大小数据为最终准确数据。
Unity 图文混排 生成SpriteAsset
image.png
Unity 图文混排 生成SpriteAsset
image.png
  1. 打开Sprite Importer
Unity 图文混排 生成SpriteAsset
image.png
Unity 图文混排 生成SpriteAsset
image.png

5.导出之后会遇到切割位置信息不对,这时候需要用tpsheet中的数据设置一次。

Unity 图文混排 生成SpriteAsset
image.png
  1. 使用tpsheet 文件重新赋值(位置,大小等属性)

    Unity 图文混排 生成SpriteAsset
    image.png
Open EditorSpriteAsset Window 代码(可以直接copy使用但是需要注意tpsheet路径)
using System.IO;
using TMPro;
using UnityEditor;
using UnityEngine;
using UnityEngine.TextCore;

namespace CS
{
    public class EditorSpritesAsset : EditorWindow
    {

        [MenuItem("Tools/EditorSpritesAsset")]
        public static void ShowSceneWindows()
        {
            EditorWindow win = GetWindow(typeof(EditorSpritesAsset), false,"编辑图集",true);
            win.Show();
        }

        private TMP_SpriteAsset mSprAss = null;
        private void OnGUI()
        {
            mSprAss = EditorGUILayout.ObjectField(mSprAss, typeof(TMP_SpriteAsset
            )) as TMP_SpriteAsset;

            if (GUILayout.Button("确定" , GUILayout.Width(50), GUILayout.Height(20)))
            {
                RefreshSpritesAsset();
            }
        }
    
        private void EditorSpriteAsset()
        {
            //此处为tpsheet文件所在的路径,读取文件中的数据
            string str = File.ReadAllText(Application.dataPath + "/TextMesh Pro/Sprites/"+mSprAss.name+".tpsheet");
            string[] strArr = str.Split('n');
            int i = 0;
            GlyphRect glyphRectTmp = new GlyphRect(0, 0, 0, 0);
            GlyphMetrics glyphMetrics = new GlyphMetrics();
            foreach (var item in strArr)
            {    
                if (item.StartsWith("#") || item.StartsWith(":") || string.IsNullOrEmpty(item)|| item.StartsWith("r"))
                {
                    continue;
                }
                string[] strArr2 = item.Split(';');
                glyphRectTmp.x = int.Parse(strArr2[1]);
                glyphRectTmp.y = int.Parse(strArr2[2]);
                glyphRectTmp.width = int.Parse(strArr2[3]);
                glyphRectTmp.height = int.Parse(strArr2[4]);
                mSprAss.spriteGlyphTable[i].glyphRect = glyphRectTmp;
                
                glyphMetrics = mSprAss.spriteGlyphTable[i].metrics;
                glyphMetrics.horizontalBearingX = 0;
                glyphMetrics.horizontalBearingY = int.Parse(strArr2[4])-5;
                mSprAss.spriteGlyphTable[i].metrics = glyphMetrics;
                i++;
            }
        }
    }
}

Unity 图文混排 生成SpriteAsset
image.png
  1. 完毕
Unity 图文混排 生成SpriteAsset
image.png

8.最后找到TMP Settings 配置文件,将新生成的Sprite Asset 设置为默认。

Unity 图文混排 生成SpriteAsset
image.png

9.直接设置图片名字就可以生效。
“You must earn 1 character if you recruit 10 times”

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。