Unity 图文混排 生成SpriteAsset
2021-04-13 本文已影响0人
_灯下影子
生成Sprite Asset
- TexturePacker 生成json、png
![](https://img.haomeiwen.com/i8786765/0436ffc3bcd3c5b8.png)
- TexturePacker 生成 tpsheet、png
![](https://img.haomeiwen.com/i8786765/51132605f662bcdc.png)
- 生成文件对比 json与 tpsheet,最终tpsheet中位置和大小数据为最终准确数据。
![](https://img.haomeiwen.com/i8786765/8c76a3f4741831dd.png)
![](https://img.haomeiwen.com/i8786765/a93e373720819954.png)
- 打开Sprite Importer
![](https://img.haomeiwen.com/i8786765/7143d4f370fc6025.png)
![](https://img.haomeiwen.com/i8786765/7881d8818f160ad1.png)
5.导出之后会遇到切割位置信息不对,这时候需要用tpsheet中的数据设置一次。
![](https://img.haomeiwen.com/i8786765/5d91236f8ffb6d11.png)
-
使用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++;
}
}
}
}
![](https://img.haomeiwen.com/i8786765/8feb70e3f89ec4c2.png)
- 完毕
![](https://img.haomeiwen.com/i8786765/3d4124b37091b6da.png)
8.最后找到TMP Settings 配置文件,将新生成的Sprite Asset 设置为默认。
![](https://img.haomeiwen.com/i8786765/d794792418c785fb.png)
9.直接设置图片名字就可以生效。
"You must earn 1 <sprite name="currency_diamond_big"/> character if you recruit 10 times"