KaaPexei 发表于 2022-5-24 11:03

Unity 图文混排 生成SpriteAsset

生成Sprite Asset

TexturePacker 生成json、png

image

TexturePacker 生成 tpsheet、png

image

生成文件对比 json与 tpsheet,最终tpsheet中位置和大小数据为最终准确数据。

image


image

打开Sprite Importer

image


image

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

image


使用tpsheet 文件重新赋值(位置,大小等属性)

image

Open EditorSpriteAsset Window 代码(可以直接copy使用但是需要注意tpsheet路径)

using System.IO;using TMPro;using UnityEditor;using UnityEngine;using UnityEngine.TextCore;namespace CS{    public class EditorSpritesAsset : EditorWindow    {            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);                glyphRectTmp.y = int.Parse(strArr2);                glyphRectTmp.width = int.Parse(strArr2);                glyphRectTmp.height = int.Parse(strArr2);                mSprAss.spriteGlyphTable.glyphRect = glyphRectTmp;                glyphMetrics = mSprAss.spriteGlyphTable.metrics;                glyphMetrics.horizontalBearingX = 0;                glyphMetrics.horizontalBearingY = int.Parse(strArr2)-5;                mSprAss.spriteGlyphTable.metrics = glyphMetrics;                i++;            }      }    }}
image

完毕

image

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

image

9.直接设置图片名字就可以生效。
"You must earn 1 <sprite name="currency_diamond_big"/> character if you recruit 10 times"
页: [1]
查看完整版本: Unity 图文混排 生成SpriteAsset