さけのさかなのブログ

同人ゲーム開発やってます。Unity使ったりする。

NotoFontでフランス語に対応するときの注意事項

www.google.com

 日本語のゲームを出すうえで、NotoSansCJKjpを使う人も多いんではなかろうか。

 このフォントには当然アルファベット26文字も含まれるので、英語版を開発する場合にも同じフォントで充分で、差し替える必要はない。

 ではフランス語版はどうだろうか?このままNotoSansCJKjp一本で済ませられればラクできるわけだが。

NotoSansCJKjpに含まれないフランス語アルファベット

 フランス語アルファベットの構成文字は以下の通り。

ABCDEFGHIJKLMNOPQRSTUVWXYZÉÀÈÙÂÊÎÔÛËÏÜŸÇŒÆ
abcdefghijklmnopqrstuvwxyzéàèùâêîôûëïüÿçœæ

 そしてNotoSansCJKjpの中には、Ÿだけが含まれていない。(小文字のÿは含まれている。)

 このため、フランス語を完璧にサポートしようとするとNotoSansCJKjpでは不足で、フォントを差し替えるか、別のフォントを使う必要が出てくる。アチャー。

Ÿという文字について

 ただし、Ÿはフランス語でも使われることがかなり珍しい文字で、せいぜい20個程度の単語でしか見られず、しかもそれらは固有名詞なんだそう。

 なので、ゲーム内に使う文字を調べてみて、Ÿが必要ないということは有りえる。そうなればめでたくNotoSansCJKjpでフランス語版を組むことができるわけだ。(実際MSTでは必要なしと判断した)

 とまあ、イマイチ座りの良くない結論になってしまうんだけど、完璧を目指した場合にやるであろうランタイムでのフォント差し替えはとてつもなくめんどいので、これはしゃーなしよな。

余談:NotoSansCJKに含まれる文字

 こっから先は余談。

 ところでNotoSansCJKに含まれる文字セットってどういうものか?

www.google.com

 公式にはこう書いてある

This includes the full coverage of CJK Ideographs with variation support for 4 regions, Kangxi radicals, Japanese Kana, Korean Hangul, and other CJK symbols and letters in the Basic Multilingual Plane of Unicode.

 韓国語日本語中国語以外の文字については、「Unicode基本多言語面にある文字」と書かれている。が、さきほどのŸ(U+0178)はというと、まさに基本多言語面に含まれている文字なのである。えー。つまり。基本多言語面にある文字のうち、なんらかの基準で選定した文字セットがNotoSansCJKには採用されている、と。そんなことある?

 結局、使いたい文字が含まれているかどうかは実際に確認しとけっつーことですわな!

Ÿがハブられる文字セット

 さらに余談の余談。

 小文字のÿが含まれるのに大文字のŸがないとか不自然だろ、と思うんだけど、実際にそういう文字セットが存在する。Latin-1(ISO 8859-1)というラテンアルファベット文字コードがそうだ。MySQLを触ってる人には見おぼえがあるんじゃなかろうか。まあ好きではないだろうけど。

 わざわざNotoSansCJKjpの文字セット策定にあたってLatin-1を参考にしたわけではないとは思うけど、ともかく、文字コードまわりはなかなか複雑怪奇なことが多くてしんどいすなあ。

【Unity】UI.Textの禁則処理・V2

前回

toriden.hatenablog.com

 禁則処理リポジトリをforkして性能を上げた。

今回 V2ブランチを作る

 設計を自分になりに使いやすくしていきます。

 コア部分の処理にTextコンポーネントは必要ないのでMonoBehaviourから独立。自動改行処理がAPIとして柔軟に使えるように。

 あとはちょいちょいバグっぽいところを潰したり。

 さしあたり今から導入するならこっちのほうがいいんじゃないかなあと。

github.com

issue

RichTextタグの処理がうまくいかない場合がある

 たとえば<color>タグ。これはUI.Textにおいては閉じタグがない場合はタグ扱いせず普通に文章として表示されるんですが、HyphenationJpnではこの場合もタグとして処理してしまい(つまり文字幅ゼロとしてしまう)齟齬により変なところで改行が発生してしまう。具体的には行が適切に改行されず、はみ出してしまうという現象が発生します。

 しかしこれをどうにかするのは骨。きっちりUnityの内部処理と同様にタグを処理しなきゃいけない。

latin文字だけの行が横幅をオーバーする

 禁則処理として数字・アルファベットが連続する場合は改行で分断しないようになっています。そのためたとえばAAAAAAAAA....みたいなアルファベットのみの長ーい1行がある場合、改行せず横幅がオーバーします。めんどいですね。

【Unity】UI.Textの禁則処理、改良版

tsubakit1.hateblo.jp

 上の記事で禁則処理に関しては紹介されているんですが、コードを見るともうちょっと良くできそうだなあ、ということでforkして直してみた。Unity2018.3.6f1。

コード

github.com

修正内容としては

 です。とりあえず軽くなるぞって感じ。

 ちなみに、元バージョンについてはArray.ExistGC負荷が高く、そこをIndexOfに差し替えるだけでかなりマシになったりします。

 インターフェースはちょっと気になるところがありつつ(文字列を渡すのがGetTextメソッドなんだけど、そこはSetTextでは?)、ひとまず互換性優先でそういうのは直さず。なので元バージョンを使ってるという人は差し替えで動くはず。

そもそも

 けっこう古いプロジェクトで更新もないので、禁則処理についてはみんな別の方法でやってたりするんでしょうかね?

techblog.kayac.com

追記

 そもそもこの処理、Textコンポーネントがなくてもできるじゃん(Fontがあれば十分)、なのでコア部分を別クラスに分けたほうが良さそう。

 というわけで次回、ブランチを切ってアレンジしていく。

toriden.hatenablog.com

サイト作成

 サークルサイトなんですが、いいかげんhtmlで書くのもかなりしんどいな、ということで移行していこうと思います。といっても旧サイトは更新停止するだけでそのまま残す方針です。

新URL

enue.github.io

 機能としてはストアページや作品紹介ページへのハブになればいいのでデザインはシンプルでいい、はず。アイコン画像ぐらいはあると見やすくなったりはするんだけど、そういうのは気になったら追々やるとして。

メールアドレス

 ちなみにですがシレっとメールアドレスも新しいのになってます。古いやつはちょっとプライベート用と混同しててあんまり良くないなあ、ということで。古いアドレスも引き続き有効なので気にしなくていいです。

使ってるサービス

 GitHub Pages。markdownで書いたらウェブページとして公開できる、便利。スマホ対応とかはエンジンに任せとくのが楽ね。

イベント申し込み

 というわけで今年上半期のイベント類の申し込みがひとまず完了。ガンバルゾー。

f:id:enuenupi:20190223170825p:plain:w300 遊雀宴2雀

f:id:enuenupi:20190223170814p:plain:w300 C96

 なお例大祭にも申し込んではあるけど、サークルカットは時間の事情でやっつけになってるので写す価値無しですわ。

 見ての通り試しにカットにTwitterのidとアイコンを含めたんだけど、なんか自画像を入れてるようなものでちょっと前に出過ぎでは? いやいやこのほうがパッと見でわかりやすいはず、とかなんとか葛藤しつつ。

MagicScrollTactics Switch版の海外配信

f:id:enuenupi:20190124114002j:plain

 2019年2月7日、北米とヨーロッパのNintendo eShopでのダウンロード配信です。

 内容は特に日本版と変わらずで、違いはせいぜい軽微なバグの修正。英語中国語は日本版の時点で入ってるかんね。

北米eShop

www.nintendo.com

ヨーロッパeShop

www.nintendo.co.uk

海外版PV

 字幕が英語になっている。

youtu.be

ついった

 リツイートしよう!

2019年のこと

やること

開発

 去年MSTのリリースをやれたので、今年は次のゲームだ!……と言いたいところだけど実際はスパっと切り替わるわけではなく、MSTはもうちょいやることがあるのでその作業が続く。1作品でできることを最後までやりきるってのもひとつの目標なんよね。

次作品

 開発は去年からちょいちょい動いていて、まあ今年上半期にはなんか画面ぐらいは出せるんじゃね?という具合。

 気持ち的には今年中にリリースできればいいなあ、なんだけど、とりあえずSteamアーリーアクセスを使う予定なので、あとはその動き次第だな! 大炎上したらさすがに簡単にリリースできんし。(いやむしろさっさとリリースしてしまうか?)

イベント参加

 いい加減CDでの頒布はもう色んな理由で嫌なので、それに伴ってイベント参加の意義も薄れてきた。仮にイベントで頒布するならDLカードでやりたいんだけど、DLカードならConcaストレージは時限つきなのでSteamキーが良いなあ、しかし例えば即売会合わせでミニゲームを出すとなるとSteamで100円とか200円のゲームをホイホイ出すことになるわけで、それはええのか??とふと考えたところ、まあ良いんじゃね?という結論になった、なってしまったので、もうしばらくはイベント参加する動機はありそう。

 というわけで、夏コミ冬コミでオリジナルのなんか、例大祭と遊宴雀で東方のなんか出す。という感じ。機会としては遊宴雀は逃すとマジで次が無さそうなので、一番参加しときたいやつだ。さすがに手が回らんので例大祭と遊宴雀は頒布物が同じになるだろうけど。

 展示系だとデジゲー博。開催自体まだ告知されてないのでわからないけど。