1. 作成に至った動機
MonoGame上でFreeTypeを使ってフォントの描画が可能になりました。
しかし、フォントファイルをそのまま同梱することを許可しているフォントは少ない。
それでも、ファイルの暗号化をしていればOKだったりする場合もあります。
そんな条件まれですが、どうしてもフォントを使いたかったので作ってみました。
2. 目標
MonoGameのコンテンツマネージャ(MGCB Editor)経由で暗号化したファイルを取得する。
あと、ついでにファイルの圧縮/展開も自動で行う。
3. 開発環境
Microsoft Visual Studio Community 2022
.NET 6.0/8.0 C#
FreeTypeSharp 3.0.0
SimpleFreeTypeSharp (https://qiita.com/fumifumi0453/items/3ccf9be78b5f456af143)
4. 参考にしたサイト
Aristurtle - MonoGame Content Pipeline Extension
-(https://aristurtle.net/tutorials/content-pipeline-extension/01_introduction.html)
5. プロジェクト作成の注意点
今回作成するものはMonoGame本体ではなくツールなので、アプリケーションプロジェクトではなく、ライブラリのプロジェクトを選択します。
今回作成するのはカスタムパイプラインなので、専用プロジェクトの「MonoGame Custom Pipeline Extension」を選択します。
5.ソース
6.解説
CustomPipelineプロジェクト
メインプロジェクト。
今回作成したものはすべてここに収まっている。
MGCB EditorとMonoGameExampleで参照している。
・BinaryImporterクラス
MGCB Editorで選択するImporter
機能としては、リソースファイルのデータを読み込む
・BinaryProcessorクラス
MGCB Editorで選択するProcessor
機能としては、画面上でパラメータを指定しContentWriterに渡す
・BinaryContentクラス
Processpr-ContentWriter間の受け渡しデータフォーマット
設計ミスにより、Content.Loadで取得するデータフォーマットにもなっている。
おそらく分けた方が良い
・BinaryContentWriterクラス
実際にコンテンツデータを書き込むContentTypeWriter
・BinaryContentReaderクラス
実際にコンテンツデータを読み込むContentTypeReader
・KanjiByteConverterクラス
コンテンツデータの変換/暗号化/復号化を行っているクラス
暗号はシーザー暗号を使用。
ExampleAppプロジェクト
テスト用実行プロジェクト
7.実行結果
・MGBC Editor実行後
ファイル内容
しっかり意味わからんデータになってますね。
8.終わりに
作り終わった後に気づいてしまったのですが、ContentWriterはバイナリデータを直接書き出せたみたいでした。
文字列出力しかサポートしていないと思ってた私バカじゃん(泣)