はじめに
Unityのinspectorおよびprojectウインドウでは、フォントをプレビューすることができません。
毎回個別に確認するのも大変なので、カスタムプレビューでプレビューを作りました。
フォントファイル選択時、このように表示されるようになります。
(複数選択時)
環境
- Unity2020.3.14f1
カスタムプレビューを作る
空のプレビューを表示
FontPreview.cs
[CustomPreview(typeof(Font))]
public class FontPreview : ObjectPreview
{
private readonly GUIContent _previewTitle = new GUIContent("Font Preview");
//プレビューを表示するか
public override bool HasPreviewGUI()
{
return true;
}
//プレビューのタイトルを変更
public override GUIContent GetPreviewTitle()
{
return _previewTitle;
}
//プレビューに描画する内容
public override void OnPreviewGUI(Rect rect, GUIStyle background)
{
GUI.Label(rect, "Preview!");
}
}
これで、Fontファイル選択時にプレビューが表示されるようになりました。
テキストを並べる
フォントを変更し、テキストを並べます。
FontPreview.cs
//表示するフォントサイズ
private readonly int[] _fontSizes = { 12, 18, 28, 36, 48, 72, };
private readonly GUIContent _previewTitle = new GUIContent("Font Preview");
private const float PositionOffset = 10;
...
//プレビューに描画する内容
public override void OnPreviewGUI(Rect rect, GUIStyle background)
{
if (Event.current.type != EventType.Repaint)
{
return;
}
var font = target as Font;
var style = new GUIStyle();
style.font = font;
style.normal.textColor = Color.white;
var position = new Rect(rect.y, rect.y + PositionOffset, 0, 0);
foreach (var fontsize in _fontSizes)
{
style.fontSize = fontsize;
GUI.Label(position, "Preview!", style);
position.y += fontsize;
}
}
オプションを追加
OnPreviewSettingsをオーバーライドしてプレビュー画面のヘッダーにテキストのオプションを追加します。
FontPreview.cs
private static string _customText = string.Empty;
private static FontStyle _fontStyle;
...
//プレビューのヘッダーをカスタマイズ
public override void OnPreviewSettings()
{
_customText = EditorGUILayout.TextField(_customText, GUILayout.Width(150));
_fontStyle = (FontStyle)EditorGUILayout.EnumPopup("", _fontStyle, GUILayout.Width(100));
}
//プレビューに描画する内容
public override void OnPreviewGUI(Rect rect, GUIStyle background)
{
if (Event.current.type != EventType.Repaint)
{
return;
}
var font = target as Font;
var style = new GUIStyle();
style.font = font;
style.fontStyle = _fontStyle;
style.normal.textColor = Color.white;
var position = new Rect(rect.y, rect.y + PositionOffset, 0, 0);
var text = _customText == string.Empty ? font.name : _customText;
foreach (var fontsize in _fontSizes)
{
style.fontSize = fontsize;
GUI.Label(position, text, style);
position.y += fontsize;
}
}
ヘッダーのTextFieldの文字列がプレビューとして表示されます。
空の場合は、フォントの名前をプレビューとして使用します。
コード全文
FontPreview.cs
using UnityEditor;
using UnityEngine;
[CustomPreview(typeof(Font))]
public class FontPreview : ObjectPreview
{
//表示するフォントサイズ
private readonly int[] _fontSizes = { 12, 18, 28, 36, 48, 72, };
private readonly GUIContent _previewTitle = new GUIContent("Font Preview");
private const float PositionOffset = 10;
private static string _customText = string.Empty;
private static FontStyle _fontStyle;
//プレビューを表示するか
public override bool HasPreviewGUI()
{
return true;
}
//プレビューのヘッダーをカスタマイズ
public override void OnPreviewSettings()
{
_customText = EditorGUILayout.TextField(_customText, GUILayout.Width(150));
_fontStyle = (FontStyle)EditorGUILayout.EnumPopup("", _fontStyle, GUILayout.Width(100));
}
//プレビューのタイトルを変更
public override GUIContent GetPreviewTitle()
{
return _previewTitle;
}
//プレビューに描画する内容
public override void OnPreviewGUI(Rect rect, GUIStyle background)
{
if (Event.current.type != EventType.Repaint)
{
return;
}
var font = target as Font;
var style = new GUIStyle();
style.font = font;
style.fontStyle = _fontStyle;
style.normal.textColor = Color.white;
var position = new Rect(rect.y, rect.y + PositionOffset, 0, 0);
var text = _customText == string.Empty ? font.name : _customText;
foreach (var fontsize in _fontSizes)
{
style.fontSize = fontsize;
GUI.Label(position, text, style);
position.y += fontsize;
}
}
}