MENU閉じる

HEXA BLOG

プログラム

HEXA BLOGプログラム2017.9.13

フォントのDistanceFieldTexture生成ツールをつくる その5

みなさんこんにちは。グリフォンです

 

さて今回はシリーズでお届けしてきた「フォントのDistanceFieldTexture生成ツールをつくる」のその5。これが最後です。

 

大まかな処理の流れは以下

フォントを1文字ずつ読み出してピクセル情報を取得

ピクセル情報からDistance Field情報を生成

CharacterInfoを生成

アトラステクスチャに書き込む

アトラステクスチャとFontSettingsを出力保存

 

 

今回はを説明していきます。(ラスト

// アトラステクスチャの書き出し
File.WriteAllBytes("D:/FontDistanceFieldGenerator/Project/Assets/" + _OutputFontTextureName, _OutputFontTexture.EncodeToPNG());

// フォント設定ファイルの書き出し
{
	// 出力用にフォントクラスを生成
	var outputFont = new Font(_TextArea.font.name);
	outputFont.characterInfo	= _OutputFontModel._chars._charInfos.ToArray();

	// 既存フォント情報のシリアライズオブジェクトを生成
	var srcSerializedFont		= new SerializedObject(_TextArea.font);
	
	// 出力フォルト情報のシリアライズオブジェクトを生成
	var dstSerializedFont		= new SerializedObject(outputFont);
	
	// 必要情報をコピー
	dstSerializedFont.FindProperty("m_Tracking").floatValue		= srcSerializedFont.FindProperty("m_Tracking").floatValue;
	dstSerializedFont.FindProperty("m_LineSpacing").floatValue	= srcSerializedFont.FindProperty("m_LineSpacing").floatValue;
	dstSerializedFont.FindProperty("m_CharacterSpacing").intValue	= srcSerializedFont.FindProperty("m_CharacterSpacing").intValue;
	dstSerializedFont.FindProperty("m_CharacterPadding").intValue	= srcSerializedFont.FindProperty("m_CharacterPadding").intValue;
	dstSerializedFont.FindProperty("m_FontSize").floatValue		= srcSerializedFont.FindProperty("m_FontSize").floatValue;
	dstSerializedFont.FindProperty("m_Ascent").floatValue		= srcSerializedFont.FindProperty("m_Ascent").floatValue;
	dstSerializedFont.ApplyModifiedProperties();
	
	// 書き出し
	saveAsset(outputFont, "Assets/" + _TextArea.font.name + ".fontsettings");
}

 

今回は2つのファイルの書き出しを行います。

 

1つ目は、前回まで生成したアトラステクスチャを File.WriteAllBytes() で書き出します。(保存パスはご自由に)

 

2つ目は、 fontsettings を書き出します。これはで生成した文字情報のファイルですが、で生成した情報だけでは足りないので、元にしたフォントからコピーします。

 

fontsettings の書き出しは Unity のアセットとして保存する必要が有るので saveAsset() という関数で行っています。

private Object saveAsset(Object obj, string filePath)
{
	// アセットデータベースを検索して既存のファイルがあれば取得する
	var existAsset = AssetDatabase.LoadMainAssetAtPath(filePath);
	if( existAsset != null ) {
		// 新しくアセット生成
		EditorUtility.CopySerialized(obj, existAsset);
		AssetDatabase.SaveAssets();
		return existAsset;
	}
	else {
		// 既存のアセットに上書き
		AssetDatabase.CreateAsset(obj, filePath);
		AssetDatabase.Refresh();
		return obj;
	}
}

 

以上で、Distance Field Textureを使用したフォントを生成するツールの完成です

 

 実は、このツールは既にリリースされている以下のタイトルで使用しています。

どんな感じの見た目か気になる方は是非アプリをプレイして見てください。

 

20170913_Pouch

『 アイテム代は経費で落ちない~no item, no quest~』

 

20170913_Wand

『魔法パスワード1111』

 

長々とお付き合いいただき、ありがとうございます。

この内容が、みなさんのゲーム制作のお役に立てば幸いです

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE