続・簡単(かもしれない)日本語表示

以前、カスタム・コンテント・プロセッサーを使って日本語表示する方法を紹介しました。

XBLIGやWindows Phone 7に配信することを考えてゲームを作る場合、カスタム・コンテント・プロセッサーを作ることが殆どなので、この方法でも問題無いのですが、初めてXNAをさわり始めた人や、ちょっとしたサンプルを作るときに

「ようこそ、XNAの世界へ♪」

と、いった一文を表示するだけのプログラムなのに、カスタム・コンテント・プロセッサーを使うのは初心者には難易度が高いし、プロジェクトが複雑になってしまいます。

そこで今回はカスタム・コンテント・プロセッサーを使わずに日本語表示をする方法を紹介します。

CharacterRegionsを手動で変更する

XNAで文字を表示する場合、プロジェクトにSpritefontファイルを追加しますが、このSpritefontファイルには使用するフォントの種類やサイズ、そしてテクスチャへ変換する文字を指定できるようになっています。この文字の指定はファイルの最後の方にあるCharacterRegionsエレメントで行います。Spritefontを追加した場合、あらかじめ英数字のコードが指定されています。

     <CharacterRegions>
      <CharacterRegion>
        <Start>&#32;</Start>
        <End>&#126;</End>
      </CharacterRegion>
    </CharacterRegions>

この中のStartとEndエレメントに使用する文字の開始と終了文字コードをユニコードで指定されています。

CharacterRegions内にはCharacterRegionエレメントを複数宣言できるので、ひらがなを表示したい場合、ひらがなのユニコードはこうなっているので、以下の様なCharacterRegionを追加します。「&#x番号;」と言うのはXMLファイル内で16進数を指定する方法です。

       <!-- ひらがな -->
      <CharacterRegion>
        <Start>&#x3041;</Start>
        <End>&#x3096;</End>
      </CharacterRegion>

カタカナや全角英数字なども同様にして追加することができます。以下はそれぞれのユニコード表PDFへのリンクです。

この方法でひらがなやカタカナといった、あらかじめ文字コード領域がハッキリしているものを追加することができます。

では、漢字の場合はどうでしょう?ユニコードではCJK、つまり中国語、日本語、そして韓国語の文字が混合して定義されているので、ひらがなと同じように指定することはできないし、コード表から一文字毎にコードを探し出すのは現実的ではありません。

実はSpritefontファイルには直接文字を指定することができます。例えば「日本語」という文字を表示したい場合、以下のようにして表示したい文字を追加することができます。

     <CharacterRegions>
      <CharacterRegion><Start>日</Start><End>日</End></CharacterRegion>
      <CharacterRegion><Start>本</Start><End>本</End></CharacterRegion>
      <CharacterRegion><Start>語</Start><End>語</End></CharacterRegion>
    </CharacterRegions>

この方法を使うことによって、カスタム・プロセッサーを書かずに日本語を表示することができます。

 

やっぱり面倒

確かに、上記の方法でも文字数が少なければ手動で良いのですが、やはり一文字づつコードを指定するのは面倒です。

そこで、今回は入力した文字列から使用している文字を抜き出してCharacterRegions宣言部分を生成するツール、ChracterRegionジェネレーターを作ってみました。

実行ファイル: http://higeneko.net/hinikeni/tool/CharacterRegionGenerator-bin.zip

ソースファイル: http://higeneko.net/hinikeni/tool/CharacterRegionGenerator-src.zip

このツールはWPF 4.0を使って作られています。XNA Game Studio 4.0をインストール時に.Net 4.0もインストールされているので、XNAの開発環境があるPCでは、そのまま動作します。

20110704 CharaGen

このツールの使い方は以下のとおりです。

  1. 上にあるテキストボックスへ文字列を入力する
  2. 「クリップボードへコピー」ボタンを押して、下のテキストボックスに表示されたCharacterRegionsの宣言部分をコピー
  3. SpritefontファイルのCharacterRegions部分を選択して、貼り付けする

また、英数字、ひらがな、カタカナ、全角英数字、そして全角スペースといったよく使われる文字をあらかじめ追加することもできます。

ツールの用途

このツールが使える場面としては:

  • サンプル等での簡単な日本語を表示する場合
  • ステータス表示、例えばレースゲームで「順位」といった文字を表示したい場合

と、いった場合には有用です。但し、RPGやテキストアドベンチャーといった大量のテキストを扱う場合は、独自のコンテント・プロセッサーを作った方が効率的でしょう。