Heliodor 2020/08/15 12:50

テキストレイアウト その2

https://ci-en.dlsite.com/creator/59/article/179208
半年ぐらい前のこの記事の続きです(※あんまり続いてない)。


普段テキストエディタとか使って文字を書いているときはあまり意識しないことなのですが、自分でテキスト配置みたいなのを実装しだすと結構細かいところが気になってくるんですよ。


何気ない会話の文字と文字の間隔……気になりだしたら止まらない

例えばゲームテキストの定番、固定ピッチフォント(モノスペースフォント。例えば「MSゴシック」など)。
全ての文字でサイズが同じなのでとても計算しやすく、1行あたりの文字数が完全に固定になる等いろいろ把握しやすいという利点があるのですが、正方形を基本とした日本語(ひらカナ漢字)だけの文ならともかく、記号とか英単語など縦長を基本とする文字が混ざると、とたんに汚く見えてしまうんですよね。
全角のアルファベットとか、片方に寄ってたり太かったり細かったりであんまりバランスよくないですし。

そんなだから、ヴィータ大脱出では可変ピッチフォント(プロポーショナルフォント。例えば「MS P ゴシック」「メイリオ」など)を使って文字ごとに最適な幅になるようにしていました。
ところがですね、文字毎に異なる文字送り量を使うってのは、文字の組み合わせによっては不自然に間が空いているように見えてしまったり、逆に詰まりすぎて見えてしまったりすることがあるんです。


今見ると「だここ」の詰まり具合と「なのか?」の開き具合の差が気になって仕方無い

そうすると1文字ごとに文字間隔を手動調整するって話になるんですが、それはあまりにも面倒なので、前後文字の組み合わせと文字間隔の調整量をテーブルにして持たせてあったりしてたんですよ。つまりカーニング処理ですね。

アルファベットにおいて、特定の文字の組み合わせではその文字間隔が開きすぎているように見えることがあります。例えば Tom という文字は、書体によっては T と o の間が必要以上に空いて見えるため、T の横棒の下に潜り込むぐらいまで o を左に寄せた方が見栄えが良くなる場合があります。

ブラウザにもよりますがTom……潜り込んでますよねコレ?

余談ですがこれを活字でやろうとすると、活字の本体同士がぶつかってしまって T と o をある程度以上近づけることはできないんですね。そこで長方形ではない特殊な形の活字(Tの左下と右下が欠けているとか、Lの右上、Jの左上が欠けているとか)を使って、できるだけ文字同士を近づけられるようにするってのがカーニング(物理)です。……DTPって便利ですよね。

あと、ウィンドウに合わせて毎回改行指定するのも面倒になってきたので、ウィンドウ枠よりも少し内側に改行推奨位置を設けて、テキストがその位置を超えそうになったら自動的に改行が入るようにしたりだとか、自動改行の結果として開きカッコが行末に来たり、閉じカッコや句読点が行頭に来ると見栄えが悪くなるのでそうならないように禁則処理をしたり、でも句読点1個だけなら改行位置をギリ超えても許すという「句読点ぶら下げ処理」を入れたりもしました。
おかしいぞ、アクションゲーム作ってるはずなのになぜワープロソフトみたいなことやってるんだ??

そして、いつの日か英語版を作った時のことも考慮して、英単語の音節辞書を組み込んで、単語の途中で改行するときは必ず音節単位になるようにしようかと思って手が動きかけたんですが、さすがにそれはやめておきました。やめておいてよかった……。

そんなことやってる暇があるなら素直に固定フォント使って自分で改行指定すれば良いのでは……と思わなくもないんですが、やっぱり気になってしまうので、あやかし紅白戦でもプロポーショナルフォントを使っています。

とはいっても所詮アクションゲーム、そんなにテキスト多くは無いので、いつかこれを生かせるゲームを作りたいですね。もちろんエロいやつ。



文字を美しく並べるみたいなことに興味がありましたら、フォントメトリクス(Font Metrics)とかで検索すると図解がいっぱい出てきますので、参考までに。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索