Skip to content

Instantly share code, notes, and snippets.

@N-Carter
Created March 4, 2013 10:21
Show Gist options
  • Save N-Carter/5081311 to your computer and use it in GitHub Desktop.
Save N-Carter/5081311 to your computer and use it in GitHub Desktop.
Adds tools to the Font inspector to let you lay out the character rects in a grid.
using UnityEngine;
using UnityEditor;
using System.Collections;
[CustomEditor(typeof(Font))]
public class FontEditor : Editor
{
Font m_Font;
static bool m_TilingControlsVisible;
static int m_FirstCharacterIndex = 32;
static int m_TilesU = 1;
static int m_TilesV = 1;
void OnEnable()
{
m_TilingControlsVisible = EditorPrefs.GetBool("FontEditor.TilingControlsVisible", false);
m_FirstCharacterIndex = EditorPrefs.GetInt("FontEditor.FirstCharacterIndex", 32);
m_TilesU = EditorPrefs.GetInt("FontEditor.TilesU", 1);
m_TilesV = EditorPrefs.GetInt("FontEditor.TilesV", 1);
}
void OnDisable()
{
EditorPrefs.SetBool("FontEditor.TilingControlsVisible", m_TilingControlsVisible);
EditorPrefs.SetInt("FontEditor.FirstCharacterIndex", m_FirstCharacterIndex);
EditorPrefs.SetInt("FontEditor.TilesU", m_TilesU);
EditorPrefs.SetInt("FontEditor.TilesV", m_TilesV);
}
public override void OnInspectorGUI()
{
m_Font = (Font)target;
EditorGUILayout.BeginVertical("Box");
m_TilingControlsVisible = EditorGUILayout.Foldout(m_TilingControlsVisible, "Tiling Controls");
if(m_TilingControlsVisible)
{
EditorGUILayout.BeginHorizontal();
m_FirstCharacterIndex = Mathf.Max(0, EditorGUILayout.IntField("First Character Index", m_FirstCharacterIndex));
string character = GUILayout.TextField(((char)m_FirstCharacterIndex).ToString(), GUILayout.Width(20));
if(character.Length > 0)
m_FirstCharacterIndex = character[0];
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.PrefixLabel("Tiling");
m_TilesU = Mathf.Max(0, EditorGUILayout.IntField(m_TilesU));
m_TilesV = Mathf.Max(0, EditorGUILayout.IntField(m_TilesV));
EditorGUILayout.EndHorizontal();
if(GUILayout.Button("Configure Character Rects"))
{
if(EditorUtility.DisplayDialog("Configure Character Rects",
"This will erase all character rects and set them up again from scratch. Are you sure?",
"OK", "Cancel"))
{
ConfigureCharacterRects();
EditorUtility.SetDirty(m_Font);
}
}
}
EditorGUILayout.EndVertical();
EditorGUILayout.Separator();
base.OnInspectorGUI();
}
void ConfigureCharacterRects()
{
CharacterInfo[] characters = new CharacterInfo[m_TilesU * m_TilesV];
float sizeU = 1.0f / m_TilesU;
float sizeV = 1.0f / m_TilesV;
for(int v = 0; v < m_TilesV; ++v)
{
for(int u = 0; u < m_TilesU; ++u)
{
var character = new CharacterInfo();
character.index = m_FirstCharacterIndex + u + v * m_TilesU;
character.uv = new Rect(u * sizeU, 1.0f - sizeV - v * sizeV, sizeU, sizeV);
character.vert = new Rect(0, 0, 1, -1);
character.size = 0;
character.width = 1.0f;
characters[u + v * m_TilesU] = character;
}
}
m_Font.characterInfo = characters;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment