雑用担当の備忘録

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

2016年03月

locres <> toml は実装していましたが toml <> ods も追加
したがって
locres → (toml) → ods → Google ドキュメント(翻訳作業所)
Google ドキュメント → ods → (toml) → locres
の作業が自動化されます。toml <> ods はかなり手抜きな実装になっていますがpython のソースを添付しているので作業所の都合の良いように改修すると良いでしょう。
配布場所:旧サイト

TToL00
概要:
  • Unity 5.2.3p3

ローカライズデータは resources.assets にあります。en_main, en_menu, en_sys がそうです。 ja_main 等もあるんですが中身は空です。

そして重要な事が一点。UnityEx 使えません。便利だったのに残念です。今後はリパックツール作成の必要があるかもですが、面倒なので UnityEx 対応してくれないかなーということで今回は終わりです。

1.1.9 で対応しました!

bitmap フォントについて

まず、前提条件として中の人は画像処理系をあまり理解していません
かなり適当な事を書いていますのでご容赦ください。

bitmap フォントには、画像データ,グリフの座標情報の2点が必要です。
まず、画像データから

tex → png 変換
Unity の画像は Texture2D で UnityEx では28で拡張子が tex のものになります。まず抽出します。

Tex ヘッダ
struct Tex {
    img_width: u32,
    img_height: u32,
    img_size: u32,
    tex_type: u32,
    mipmaps: u32,
    num0: u32,
    num1: u32,
    num2: u32,
    num3: u32,
    num4: u32,
    num5: u32,
    num6: u32,
    num7: u32,
    mipmap_flag: u32,
    img_size2: u32,
}
num0~num7と不明な部分が多いです
---------------------------------------------------------------
追記: 判明したので修正
struct Tex {
    img_width: u32,
    img_height: u32,
    complete_image_size: u32,
    texture_format: u32,
    mip_count: u32,
    is_readable: u8,
    read_allowed: u8,
    padding: u16,
    image_count: u32,
    texture_dimension: u32,
    filter_mode: u32,
    aniso: u32,
    mip_bias: f32,
    wrap_mode: u32,
    lightmap_format: u32,
    color_space: u32,
    img_size: u32,
}
---------------------------------------------------------------
まず、tex_type を見ます。
enum TexType {
    Alpha8,        // 0x1
    RGBA32,     // 0x4
    ARGB32,     // 0x5
    RGB565,     // 0x7
    DXT1,         // 0xA
    DXT5,         // 0xC
}
この部分は Unity TextureFormat の数ありますので、上記に無いフォーマットのデータ形式もあります。
今回の LIB では上記のフォーマットのみなので上記の enum になっています。

各自の実装に依ると思いますが、自分の使用しているライブラリでは pixel はグレイスケール・フルカラーの2点のみで上記の Alpha8 とかのフォーマットはそのままでは使えません。なので自前で読み込みます。

Alpha8:
これは alpha が1バイトで連続して格納されているので読み込んで alpha, glay(0固定) で pixel 設定して png で save すると png ファイルが生成されます。ただこのままだと上下左右反転した画像になっているので出力する前に180度回転・左右反転を行ったあとに png 出力します。

フォント画像は、この alpha8 です。

RGBA32, ARGB32:
RGBA32 と ARGB32 は格納されている順番が違うだけなので、4バイト読み込み順番を揃えてフルカラー pixel に設定して png 出力
反転してますので180度回転・左右反転を行う

RGB565:
LIBではブランクデータのみなので実装せず。

DXT1,DXT5:(DDS)
DDSなのでこれは png ではなくそのまま出力します。DDSヘッダーが無いので付加します。

struct DDSHeader {
    magic: u32,              // 0x20534444("DDS ")
    header_size: u32,    // 0x7C
    flag: u32,                  // 0xA1007
    img_height: u32,
    img_width: u32,
    pitch: u32,               // img_width * img_height
    depth: u32,              // 0
    mipmap_count: u32,
    reserve1: [u8; 44],  // 0 fill
    pixel: Pixel,
    caps1: u32,            // 0x401008
    caps2: u32,            // 0
    caps3: u32,            // 0
    caps4: u32,            // 0
    reserve2: u32,        // 0
}
struct Pixel {
    size: u32,                // 32
    flag: u32,                 // 4
    four_cc: u32,
    rgb_bit_count: u32, // 0
    r_mask: u32,           // 0
    g_mask: u32,          // 0
    b_mask: u32,          // 0
    a_mask: u32,          // 0
}

Pixel の four_cc は DXT1 なら 0x31545844("DXT1") DXT5 なら 0x35545844("DXT5")

mipmap_count は tex の mipmap_flag が 1 なら mipmap mode で img_height と img_width を比較して大きい方の値を元に算出する。
img_width が 2048 の場合

2048 = 2^11
11-1=10

よって mipmap_count = 0xA(10) となる。

このヘッダーを付加して DDS ファイルを出力すると良い。
この画像も上下左右反転していますが、画像編集ソフトで反転してから画像編集すると良いでしょう。
戻すときも画像反転を忘れないように。

png → tex 変換
上記の反対をするだけなんですが、問題は tex ヘッダーの部分です。不明な部分があるのでヘッダーは元のヘッダーを使用すると良いでしょう。
画像反転を忘れないように。

以上で画像データの取り出し・格納が出来るようになります。

座標情報は次回

ARIAL SDF Atlas.tex
sharedassets0_00001.-1

MasterOfOrion00
概要:
  • Unity 5.2.1p3
  • 公式ローカライズ含む
  • Font: Scaleform

下記の情報は古いです。パッチで修正済みなので必要ありません。

必要ないと書きましたけど、公式のjapaneseフォントはBoldが無いので若干表示がおかしい気もするのでBoldを入れた方が綺麗になるかもですなー


公式でローカライズデータ存在します。ではなぜここで取り扱うのか

まず画面を見てください。画像クリックで拡大推奨

MasterOfOrion01
よさそうに見えますが、右の文章の 「平和」 とか 「天空神」 とかなんですが、日本の漢字ではありません。

フォントを見てみます

MasterOfOrion02

NotoSansKorean というフォントを使用しているのですが、その 「平」 を見ます。

左下に Codepoints が $5E73 となっています。

では源真ゴシックを見てみます。

MasterOfOrion02j
Codepoints $5E73 と同じでグリフが違います。こちらは日本の漢字になっています。

このように同じ Codepoints に日本の漢字と韓国漢字(中国の繁体字)が同じように割り当てられていることからおこる現象です。まぁ、西洋の方にはこのへんの事情が分かりずらいでしょうね。同じ漢字だから同じコードでいいよねという感じなんでしょうが、やはり気になるものは気になるものですw


対処方法:

このゲームは Scaleform for Unity を使用しています。

Scaleform なのでいつものやり方で置き換えが出来ます。

MasterOfOrion_Data/StreamingAssets/

に swf がありますのでフォント置き換え、fonts_jp.swf にして fontconfig.txt の jp 部分を変更すると

MasterOfOrion01j
正常に表示されています。

↑このページのトップヘ