雑用担当の備忘録

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

2016年04月

前回の記事を元にまずは画像のみ(4096x4096に変換したもの)を取り込んだ状態
EL05_01
表示されていないですが座標情報が正しくないので表示されないことが正解
座標情報を4096x4096で調整します
EL05_02
表示されます。
大丈夫そうです。
EL05_03
japanese グリフとマージした texture に置き換えて japanese グリフの座標情報を追加すると
上の様に表示されます。

とこんな感じなんですが
今回作成したツール類は提供できますので、ローカライズされたいかたはご連絡ください。
ただし、ツールは手抜き実装のため使用にはくせがありますのでご了承ください。

地震もなんとなく収まりつつあるので続き

SmallText
画像ファイルは sharedassets4_00690.tex なのでこれを png 変換
座標情報は sharedassets4_00013.-2 で "@" で解析します。
"@" の char_code は 64 なのでその部分を抜きだし

[[characters]]
advance = 10.0
char_code = 64
kerning_encoded_data = []

[characters.dimension]
x = 10.0
y = 10.0

[characters.offset]
x = 0.0
y = -8.0

[characters.runtime_texture_coodinates]
height = 0.0
width = 0.0
x = 0.0
y = 0.0

[characters.texture_coordinates]
height = 0.0390625
width = 0.0390625
x = 0.51953125
y = 0.16796875

最後の texture_coordinates が座標情報の部分でこの値は画像の相対値になっています。
この部分を絶対値に変換してみます。
画像のサイズは 256x256 です。

X: 0.51953125 * 256 = 133
Y: 0.16796875 * 256 = 43
width: 0.0390625 * 256 = 10
height: 0.0390625 * 256 = 10

Y が 43 になっていますがこれは原点が画像の左下になっているためです。
画像の原点を左上にするには
256 - 43(Y) - 10(height) = 203
となります。

画像にあてはめます
EL04_01
緑枠の座標が先ほど計算した値になっています。
選択された場所は "@" のグリフになっているので大丈夫そうです。

とここまでの解析でとりあえず表示まで行けるようになるんじゃないですかね。
お試しください。

もう少し書くと
日本語のグリフを埋め込めるようにまずは画像を 4096*4096 に拡大してスペースを空けます。
原点は左下のためオリジナル画像は左下にペースト
EL04_02
4096*4096 なので Y は 4096-43-10=4043
大丈夫そうです。
これから
x: 133 / 4096 = 0.032470703125
y: 43 / 4096 = 0.010498046875
width: 10 / 4096 = 0.00244140625
height: 10 / 4096 = 0.00244140625
となる。
sharedassets4_00013.-2 をこんな感じで更新していけば 4096*4096 の画像で表示され。
あとは上の方に japanese グリフを埋め込みその japanese 座標を追加してやる感じでしょうか。

中の人は九州人でありまして無事ではあるんですが今回の地震にはかなりびびってます…
九州人は本当に地震の耐性が無いので今回のような大きめな奴にはまいります。

Texture フォーマットについて

まず LIB 解析 で Tex フォーマットを確認してください。
mip_count: u32,
の部分なんですが Unity 5.0.3 の頃は
mip_map: bool(u8),
でした。この部分のフォーマットが変わっています。
EL03_01
上の 00663 が古いバージョンで下の 00684 が新しいバージョンです。
mip_map: u8 ⇒ mip_count: u32 にサイズが変更されたため後の padding も変わります。
padding が 00 ⇒ 00 00 になります。

変更点はこれだけです。

前回の記事は数字のフォントが対象なので後半のフッター部分が null ばかりだったので今回はその辺重点

対象となるのは NormalText (sharedasset4_00011.-2)
EL02_01
ハイライト部分は characters の終わりの要素 0x70BC: 0x20(" ")
つまり半角スペースの座標情報
EL02_02
characterSet の部分 文字コードは UTF-8
EL02_03
font = SourceSansPro-Regular.ttf
faceStyle = string.Empty
fontSize = 16
usePixelMetrics = false
material = AmplitudeGuiImage_00005.mat
EL02_04
specialCharacters の部分
0x7210: 0x5F(95) speCialCharacter の個数

    [Serializable]
    public class SpecialCharacter
    {
        public int Charcode;
        public float Advance;
        public Vector2 Offset;
        public Texture2D Texture;
    }

なので
specialCharacters.Charcode = 0x1E14
specialCharacters.Advance = 16.0f
specialCharacters.Offset = new Vector2(0.0f, -13.0f)
specialCharacters.Texture = fidsFoodSD.tex
EL02_05
fidsFoodSD.tex
ろくにゲームをやっていないのでこの画像があってるのかおかしいのかは不明なんですがなんとなくそれっぽい
EL02_06
SpecialCharacter の次

highdefAlternate = sharedassets4_00012.-2 (NormalTextHD)
lineHeight = 20.0f
descender = 6.0f
ascender = 16.0f
outline = false
outlineColor.a = 1.0f
outlineColor.b = 1.0f
outlineColor.g = 1.0f
outlineColor.r = 1.0f
outlineGradient = 1
distanceField = false
distanceFieldSize = 0
incorporateToAtlas = true
onlyAlphaChannel = false
マーキングしてませんが
0x7CB8: kerningUsage = GDI
0x7CBC: kerningPairs = null
です
EL02_07
続きの部分
文字コード UTF-8 で見るとキリル文字およびハングルになっています
この部分が AdditionalCharacterSet になります。
EL02_08
0x7CC0: AdditionalCharacterSet の個数(キリル文字,ハングル)

    [Serializable]
    public class AdditionalCharacterSet
    {
        public string CharacterSet;
        public Font Font;
        public AgeFont.KerningMode KerningUsage;
        public int FontSize;
    }

キリル文字:
0x7CC4: additionalCharacterSets.CharacterSet のサイズ(UTF-8 のバイトサイズ)
0x7CC8-0x7D5D: additionalCharacterSets.CharacterSet
0x7D5E-0x7D5F: padding
additionalCharacterSets.font = LiberationSans-Regular.ttf (sharedassets3.assets)
additionalCharacterSets.KerningUsage = Disabled
additionalCharacterSets.FontSize = 16

ハングル:
0x7D74: additionalCharacterSets.CharacterSet のサイズ(UTF-8 のバイトサイズ)
0x7D78-0x7F2A: additionalCharacterSets.CharacterSet
0x7F2B: padding
additionalCharacterSets.font = DirectNH.ttf (sharedassets3.assets)
additionalCharacterSets.KerningUsage = Disabled
additionalCharacterSets.FontSize = 16

ここでちょうどファイルの最後なので辻褄はあってそうです。

ここまで解析してはじめてローカライズ版の sharedassets4 を確認
フォーマットも別に変更になったわけでは無さそうだし何で更新版来ないんでしょうね。
単に作者が忙しいだけなような気がしますね。ますます手出ししづらい…
まぁ、解析の仕方がメインなんで問題ないと信じたい。

まぁ、このやり方で他の Unity ゲームの解析に役立つとは思うので無駄にはならないと思っていますが

↑このページのトップヘ