Skip to content

Instantly share code, notes, and snippets.

@Hyrtwol
Last active October 26, 2016 17:45
Show Gist options
  • Save Hyrtwol/9967cafaded73bed433fb844572fa99a to your computer and use it in GitHub Desktop.
Save Hyrtwol/9967cafaded73bed433fb844572fa99a to your computer and use it in GitHub Desktop.
Convert sprite mapping to custom font settings in Unity 3D
[MenuItem(ItemNamePrefix + "Convert Font")]
public static void ConvertFont()
{
var sb = new StringBuilder();
var objs = AssetDatabase.LoadAllAssetsAtPath("Assets/Amstrad/AmstradFont.psd");
var sprites = objs.OfType<Sprite>().OrderBy(s => CalcIndex(s.name)).ToArray();
foreach (var sprite in sprites)
{
sb.AppendLine("name " + sprite.name);
sb.AppendLine("rect " + sprite.rect);
}
Debug.Log(sb.ToString());
var font = AssetDatabase.LoadAssetAtPath<Font>("Assets/Amstrad/Amstrad.fontsettings");
Debug.Log(font);
var ci = new CharacterInfo
{
minX = 0, minY = -8, maxX = 8, maxY = 0, uvBottomLeft = new Vector2(4, 4), uvTopRight = new Vector2(12, 12), advance = 8
};
var characterInfo = new CharacterInfo[256];
for (int i = 0; i < 256; i++)
{
var sprite = sprites[i];
var r = sprite.rect;
ci.index = i;
ci.uvBottomLeft = new Vector2(r.xMin/ 256, r.yMin / 256);
ci.uvTopRight = new Vector2(r.xMax / 256, r.yMax / 256);
characterInfo[i] = ci;
}
font.characterInfo = characterInfo;
EditorUtility.SetDirty(font);
AssetDatabase.SaveAssets();
}
private static int CalcIndex(string name)
{
var i = name.IndexOf('_');
try
{
return int.Parse(name.Substring(i+1));
}
catch (Exception ex)
{
Debug.LogError(ex.Message + " "+name+" "+i);
throw;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment