美文网首页unity3D技术分享
Unity 图文混排 生成SpriteAsset

Unity 图文混排 生成SpriteAsset

作者: _灯下影子 | 来源:发表于2021-04-13 18:05 被阅读0次

    生成Sprite Asset

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

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

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


      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++;
                }
            }
        }
    }
    
    
    image.png
    1. 完毕
    image.png

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

    image.png

    9.直接设置图片名字就可以生效。
    "You must earn 1 <sprite name="currency_diamond_big"/> character if you recruit 10 times"

    相关文章

      网友评论

        本文标题:Unity 图文混排 生成SpriteAsset

        本文链接:https://www.haomeiwen.com/subject/lptzhltx.html