雑用担当の備忘録

技術的な話のみになります。翻訳データそのものはありません。 カテゴリ>その他>注意事項を必ず参照してください

font について

SotD は bitmap font です。Unity の bitmap フォントは色々なパターン(NGUI 等)があるのですが今回は標準形の bitmap font で UnityEx 上で font (type 128) のファイル名の拡張子が font_raw で表示されているものです。ttf の方は dynamic font になります。

font_raw:

struct FontRaw {
    ascii_stzrt_offset: i32,
    tracking: f32,
    line_spacing: f32,
    character_spacing: i32,
    character_padding: i32,
    convert_case: i32,
    default_material: ObjId,
    character_rects_size: u32,      // 0 == dynamic font, 0 != bitmap font
    character_rects: Vec<CharacterInfo>,
    texture: ObjId,
    kerning_size: u32,
    kerning: Vec<PairData>,
    pixel_scale: f32,
    font_data_size: u32,            // 0 != dynamic font, 0 == bitmap font
    font_data: Vec<u8>,             // ttf image
    font_size: f32,
    ascent: f32,
    default_style: i32,
    font_name_size: u32,
    font_names: Vec<FontName>,
    fallback_fonts_size: u32,
    fallback_font: Vec<FallbackFont>,
    font_rendering_mode: i32,
}

ここで注目するのは、bitmap font は caracter_rects (座標情報)のデータが存在し dynamic font は font_data (ttf ファイルそのもの) が存在する。
つまり bitmap → dynamic への変換は
character_rects_size = 0;
character_rects はカット
kerning_size = 0;  << kerning はカット
kerning は無し
font_data_size = ttf ファイルサイズ
font_data = ttf ファイルデータと置き換える
とし
convert_case = -2;
とすると dynamic font へ変換されます。
後は、この変換された raw_font データを UnityEx にてインポートすると
SotD_01j
SotD_02j
SotD_03j

と表示されます。
フォントサイズは要調整のような気もするが…

Localization data:

LocalizationUtils にてロードしているのでキャストしている LocalizationTagBundle に注目する。
LocalizationTagBundle は単なる LocalizationTag のコンテナなので LocalizationTag に注目する。

public class LocalizationTag
{
    public int m_Id;
    public string m_Tag;
    public string m_E; // english
    public string m_F;   // french
    public string m_I;    // Italian
    public string m_G;  // German
    public string m_S;  // Spanish
    public string m_P;  // Portuguese
}

なのでこれっぽい。コンテナの方の LocalizationTagBundle で GameObjectID を検索する。
GameObjectID = 1780

resource.assets の MonoBehaviour (type:114) で 1780 にマッチするデータを抽出すると拡張子 -20 のデータだとわかる。(現時点のバージョン。この部分は更新により変動があります。)
-20 の中身を見ると、LocalizationTag があるのがわかります。
文字コードは UTF-8
で上記の情報より編集しやすいようにバイナリ<>テキストツールを作成するとよい。

オリジナル
SotD_01
Localization data 書き換え後
SotD_01e
オリジナル
SotD_02
Localization data 書き換え後
SotD_02e
オリジナル
SotD_03
Localization data 書き換え後
SotD_03e

はい、文字化けしています(表示されていない)。
bitmap フォントを使用しているのですがこれを dynamic フォントに変換すると正常に表示されるようになります。
フォントの話は次回

SotD_01
概要:
  • Unity 5.3.4p5
  • Localization data: resources.assets (LocalizationTagBundle, LocalizationTag)
  • Font: bitmap, sharedassets0.assets

SotD_01j

↑このページのトップヘ