3

コンパイルされたスプライトフォントを編集するには? 一部の文字のカーニングを変更したり、1 ピクセルまたは 2 ピクセルを消去したり、エイリアシングを変更したりしたいのですが、まだサポートされている、または広く知られている公式ツールが見つかりませんでした。

コンパイル済みのスプライトフォントを編集する方法がない場合 (または編集が難しすぎる場合)、スプライトフォントを手動で作成するにはどうすればよいですか?

4

1 に答える 1

3

これを行う公式の方法はありません。タイプを見ると、SpriteFont変更できる貴重なものがほとんどないことに気付くでしょう ( DefaultCharacterSpacingおよびLineSpacing)。

そして、そのコンテンツ パイプラインの対応物である を見ると、メンバーSpriteFontContentがまったくありません。public


最善の策は、ILSpyを使用して、それらのクラスが持つプライベート メンバー (およびそれらがどのように機能するか) を確認することです。次に、リフレクションを使用してそれらを直接変更します。SpriteFont基本的には一連の指標データとTexture2D.

コンテンツ パイプライン エクステンションをSpriteFontContent作成し、それをビルドするときに変更することをお勧めします (自分でビルドしていない XNB ファイルがある場合、これはより複雑になります)。次のようになります。

[ContentProcessor(DisplayName = "Custom Font Processor")]
public class CustomFontProcessor : FontDescriptionProcessor
{
    public override SpriteFontContent Process(FontDescription input, ContentProcessorContext context)
    {
        SpriteFontContent output = base.Process(input, context);
        // ... your modifications here ...
        return output;
    }
}

生活を楽にするために、公開されたオブジェクトを使用dynamicして、プライベートメンバーに直接アクセスできるようにすることができます(この反映されたコードを簡単に記述できます)。

独自のスプライト フォント プロセッサを実装する Nuclex TrueType Importer を見ることができます。これはオープン ソース (albiet C++/CLI) であるため、その機能を調べたり、変更したりすることができます。の独自のバージョンが含まれていますSpriteFontContentが、残念ながら同様にロックダウンされています。Nuclex が提供する最も重要なことは、スプライト フォントのさまざまなメトリックが何を意味するかを説明するコメントがあることです。

明らかに、XNA のプライベートな部分をいじっているので、異なる XNA バージョン間で動作し続けるとは思わないでください。(そもそもすべて非公開である理由は、XNA チームが将来自由に変更できるようにするためです。)


他にできることは、別のツールを使用してフォントを「フォント テクスチャ」として作成することです (ここで説明されていますが、この記事はかなり古いものです)。

于 2012-09-12T12:01:07.527 に答える