0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MonoGameでフォントファイルを暗号化する

Posted at

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」を選択します。
001.png

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.実行結果

・MGCB Editor実行前
image.png

・MGBC Editor実行後
image.png
ファイル内容
image.png
しっかり意味わからんデータになってますね。

ExampleApp実行結果
image.png

8.終わりに

作り終わった後に気づいてしまったのですが、ContentWriterはバイナリデータを直接書き出せたみたいでした。
文字列出力しかサポートしていないと思ってた私バカじゃん(泣)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?