2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Steam版「ひぐらしのなく頃に」の本文フォントを変更する

Last updated at Posted at 2020-06-30

Steam版「ひぐらしのなく頃に」の本文フォントを変更しよう

変更前(MSゴシック)
fontmod_before.PNG
変更後(モトヤシーダW3等幅)
fontmod_after.PNG

Steam版「ひぐらしのなく頃に」(以下ひぐらし)は本文用フォントにMSゴシックを採用しているのだが、デザインが正直…なとこがある。だがひぐらしのシステムフォントはリソースとして埋め込まれており、自由に変更することは通常できない。

これに対し、海外の有志がリソースファイル変更(mod)の作業をある程度自動化してくれるスクリプトを公開しているのだが、記事が英語の上わかりにくい。そのため改めて概訳の上構成を修正した記事を公開することにした。

※元サイトが日本国内IPからのアクセスをブロックしているため該当記事へのリンクは載せないでおく。
(探せばすぐに見つかると思います)
ブロックの理由は著作権的問題によるものらしいので、この記事で触れる内容もフォント変更に限るものとする。
もちろんですが、この方法で生成した改造アセットファイルを配布するのはやめてください。

準備

Unity 2019 (以降)で生成されたSDF AssetがUABEでは読み込めないので2019以降は使用不可。2018はUABEでこそ読み込めるが、ui-editing-scriptsが未対応のため不可。元記事で使用されているのが5.5.5なので5を選ぶのが無難。
検証では5.6.7を使用した。(Githubには2017も対応済みと書かれていたが未検証)

TextMeshProのストアでの配布は終了しているが、必死の検索の結果このページからDLできることが判明。製作者がアップロードしたものなのでDLすることに特に問題はない。ここではUnity5.5に対応したバージョン 1.0.56.55.0b2をDLする。

Pythonは最新バージョンで特に問題はないはず。ui-editing-scriptsが動けばよい。
ui-editing-scriptsで使用するのはTMPAssetConverter.pyのみ。

UABEはアセットファイルに格納されたデータを閲覧・改造できるツールである。
特に問題ない限りはリンク先から最新バージョンをDLしておく。

導入

PCにUnity 5、Pythonをインストール。
UABEとui-editing-scripts は適当なフォルダーに配置しておく。
pipでPythonに必要なパッケージを導入。

pip install numpy Pillow unitypack

unitypackがインストールできない場合

※unitypackは依存パッケージとしてdecrunchを指定しているのだが、これがうまくインストールできないことがあるらしく、その場合unitypackのインストールに失敗する。(私の環境でもエラーが出てpipではインストールできなかった)。ui-editing-scriptsではdecrunchを必要としないので、うまくインストールできない場合は依存性を切ったunitypackのフォークを下記のコマンドで手動インストールしてやればよいとのこと。

python setup.py install

SDF Assetの生成

ひぐらしのテキスト表示では通常のアウトラインフォントではなく、SDFという特殊な形式のフォントが用いられている。(Unityでは低負荷でテキストにエフェクトをかけられるという特長からよく用いられているらしい)
そのため、ひぐらし本体のリソースファイルにフォントを埋め込む前に、用意したフォントをSDFに変換しておく必要がある。

Unityを起動し、Assets → Import Package→Custom Package…でUnityにTextMeshProをインポートする。
再起動するとWindow メニューからTextMeshProが起動できるようになっている。
下部のプロジェクトフォルダーにはあらかじめフォントファイルを配置しておく。

Window → TextMeshPro → Font Asset Creator と進みFont Asset Creatorを起動。
適宜設定をしてGenerate Font Atlasをクリック。
設定項目の解説は長くなったため以下に分けて記した。

プログレスバーが右端まで到達するとアセットが保存できるようになっている。保存時の名前はデフォルトの**[Fontname]-[Weight] SDF.asset**のままにしておく。

Font Asset Creatorの設定

  • Souce Font File
    元となるフォントを選択する。プロジェクト内のファイルしか選べない。
  • Sampling Point Size
    文字のサイズを指定する。特に問題なければひぐらしで用いられているものと同じ26でよい。
  • Packing Method
    フォントのパッキング方法?を選ぶ。Optinumはその名の通り最適化するためかなり時間がかかる。通常はFastでいいと思う。
  • Atlas Resolution
    アトラス(文字データを載せるキャンバスのようなもの?)の画質を選ぶ。小さすぎると文字が入りきらないため余裕をもって選ぶとよい。
    参考までに「サイズ26、Fast、4096*4096、JIS第二水準まで」の場合、アトラス全体の6割ほどが文字で埋まっていた。
  • Character Set
    フォントに採用する文字の範囲を選ぶ。ひぐらしではテキストに最適化された日本語用の文字(約3000種類)がSDFフォントに埋め込まれているらしいが、それを特定するのは面倒(一応調べるスクリプトはある)。なので今回はここに掲載されているすべての文字を埋め込むことにする。こうすることで文字の記載漏れはおそらく起こらない。
    この場合はCustom Charactersを選びCustom Characters ListにUnityのText Mesh Proでほぼ全ての日本語を表示させるで紹介されているjapanese_full.txtの中身を貼り付ける。
  • Render Mode
    レンダリングのアルゴリズムを選択する。生成されるフォントの品質と生成にかかる時間はトレードオフなので注意。時間をかけてもいいならDistance Field 32を選ぶ。
  • Get Kerning Pairs?
    カーニングペアの設定をするかを決める。チェックを入れといて特にデメリットはないのでチェックする。

AtlasとMonobehaviourの抽出

UABE(AssetBundleExtractor.exe)を起動する。
File→OpenでAssetファイルを開き、Assetファイル内から必要なデータ3つを抽出する。

new~.dat

fontmod_new.PNG
生成されたSDF Asset([Fontname]-[Weight] SDF.asset)をUABEで開く。
3つのデータが格納されているが、今回使用するのはそのうちの2種類。

  • Texture2D [Fontname] SDF Atlas
  • Monobehaviour

それぞれExport Rawで抽出する。
名前は次のステップ用にそれぞれ**”newAtlas.dat”"newMonoBehaviour.dat"**にしておく。

old~.dat

fontmod_old.PNG

同様に、ひぐらし本体のAssetsファイルからもフォントデータを抽出する。
ひぐらしのゲームデータ:
\SteamLibrary\steamapps\common\(ひぐらし本体ルートフォルダ)\HigurashiEp0X_Data
に格納されているsharedassets0.assetsをUABEで開く。(HigurashiEp0X_DataのXには章番号が入る)

画像のように内部データがずらっと表示されるが、その中から

  • MonoBehaviour msgothic_0 SDF

を選んでExport Rawで抽出する。
名前は**"oldMonoBehaviour.dat"**にしておく。

TMPAssetConverter

前の節で抽出した

  • newAtlas.dat
  • newMonoBehaviour.dat
  • oldMonoBehaviour.dat

に加えて、ui-editing-scriptsに同封されているTMPAssetConverter.pyを同一のフォルダに配置する。さらに同じフォルダに出力ファイルを書き出すフォルダ:outputFolderを作り、その上で以下のコマンドを実行する。

python TMPAssetConverter.py newAtlas.dat newMonoBehaviour.dat oldMonoBehaviour.dat outputFolder

成功すれば、outputFolderに

  • msgothic_0 SDF Atlas_Texture2D.dat
  • msgothic_0 SDF_TextMeshProFont.dat

の2種類のファイルが出力されているはずである。

sharedassets0.assetsの書き換え

msgothic_0 SDF Atlas_Texture2D.datmsgothic_0 SDF_TextMeshProFont.datを使って
内部データファイルsharedassets0.assetsを以下の手順で書き換える。
あらかじめsharedassets0.assetsはバックアップしておく。

フォント変更用のsharedassets0.assetsをUABEで開き、

  1. MonoBehaviour msgothic_0 SDF を選ぶ。
  2. 選んだ状態でImport Rawをクリックする
  3. msgothic_0 SDF_TextMeshProFont.datをインポート。

msgothic_0 SDF Atlasについても同様に行う。

  1. msgothic_0 SDF Atlas を選ぶ。
  2. 選んだ状態でImport Rawをクリックし
  3. msgothic_0 SDF Atlas_Texture2D.datをインポート。

うまくインポートできていればModifiedの欄にアスタリスク()が付いているはずである。

このままsaveすると書き換えられたsharedassets0.assetsが出力される。これを元のフォルダ:
SteamLibrary\steamapps\common\(ひぐらし本体ルートフォルダ)\HigurashiEp0X_Data\
に配置することで、冒頭の画像のようにフォントを置換してひぐらしを楽しむことができる。

補記:テキストの見た目調整方法

フォントのカーニング設定等でMSゴシックより1行あたりの文字数が減ると、行数が増えてテキストがウィンドウ外にはみ出してしまうことがある。そのときは、ひぐらし本体の設定ファイルを所定の場所に置くことでテキストの表示を変更できる機能を利用しよう。

\(ひぐらし本体ルートフォルダ)\StreamingAssets\Scriptsを開くと、大量のシナリオテキストファイルの中に混じってinit.txtという名前のファイルがある。

このinit.txtの
SetCharSpacing(); SetLineSpacing(); SetFontSize();などのパラメータの()内の数値を適当な値に編集する。
編集前にバックアップをとっておく。

編集済みinit.txtを\(ひぐらし本体ルートフォルダ)\StreamingAssets\Updateに配置した状態でひぐらしを起動すると、本文テキストの見た目が変更されているはずだ。

ダイマ

鬼隠し編は2020年7月現在無料でDL可能です。
(https://store.steampowered.com/app/310360/Higurashi_When_They_Cry_Hou__Ch1_Onikakushi/)

Steam版のひぐらしはノベルゲーにありがちな選択肢による分岐が全くありません。
なので選択肢に戻るという作業をせずに、一気に読み進めることができます。
そしてSteam版をプレイすれば、アニメ版だけでは描かれていない場面やカットされた重要な情報が数多くあることがわかります。

まだひぐらしの中身を知らない方も、アニメだけご覧になった方も、この機会に続編を含めて是非プレイされることをおすすめします。まとめ買いの場合、以下のリンク先のバンドルで購入するのがお得です。https://store.steampowered.com/bundle/709/Higurashi_When_They_Cry_Hou/

参考ページ

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?