回答:
SharpZipLibまたはDotNetZipを調べることもできます。DotNetZipを使用するとStream
直接アクセスできます。これは、そこにあるほとんどのC#ライブラリが(ファイルではなく)ストリームからロードできるため便利です。さらに、DotNetZipは、法的に疑わしい例外を除いて、GPLの代わりにMs-PL(BSDライク)を使用します。
別のオプションは、テクスチャアトラスを使用することです -多くの小さな画像にいくつかの大きな画像を持たせる代わりに。これらは実際には少し速くロードされ、描画方法に慣れれば実行時に少し速くなります。
最後に、関連するロスレスコンプレッサー(PNG、FLACなど)を通じて各アセットタイプを実行し、それらをフラットファイル(基本的には圧縮が無効にされたzipファイル)に保存できます。ほとんどの場合サイズが大きくなるため、圧縮データの圧縮は避けてください。
いくつかの先行技術:
オプションは、圧縮テクスチャの作成に使用するのと同じ圧縮形式で画像を保存することです。これには、損失のある形式を別の形式に変換するのではなく、データを損失のある形式で保存するという利点があります。テクスチャによっては、そのようなファイルを圧縮アーカイブに保存することで、まだ何か得られることがあります。
圧縮テクスチャの詳細については、この回答を参照してください:https : //gamedev.stackexchange.com/a/5177/3505
ZLIBは良い答えになるかもしれませんが、アセットを取得する人がいることを知っている場合は、独自のファイル形式を作成してアセットを保存することもできますが、それほど難しくはありません。
ここにそれを作る方法があります。
これはCにありますが、C#はCやC ++に似ているため、学習するのはそれほど難しくありません。
もちろん、より高度な知識を持っている人はあなたのリソースを捕まえることができます。必要に応じて、暗号化を少し追加できます。
これは非常に便利ですが、ファイルを結合するだけです。圧縮についても、2つの選択肢があります。
リソースファイル全体を作成して圧縮し、出荷します。
この方法は簡単ですが、あまり良い方法ではありません。リソースを1つだけ取得する場合は、すべてを解凍する必要があります。
すべてのリソースを圧縮し、圧縮してリソースファイルに追加します。
これもかなり良い方法です。方法1の横ではサイズがわずかに大きくなります。各ファイルが個別に圧縮されるためですが、柔軟性が必要な場合はより良い方法です。
それぞれの方法には独自の欠点があるため、賢明に選択する必要があります。一般に、ゲームのリソース数がかなり少ない場合は、方法1の方が適しています。LOTSがある場合は、方法2が適しています。すべてのリソースのサイズが増えると、得られる余計な量を圧倒するからです。
圧縮ライブラリの場合、次のものがあります。
ゲーム内で高速にアクセスしたい場合はLZOを使用します。リアルタイムで解凍することを心配する必要はありません。ファイルを縮小したい場合は7-Zip圧縮率とサイズのバランスが取れている場合はLOTまたはZlib自体です。
選択はあなた次第です:D
ああ、もちろん、データを圧縮する他のアルゴリズムがあり、それらのグーグルを見つけることができます。