🗃️

Unity で Zip を扱う

2021/02/26に公開

概要

この記事では、Unity で Zip ファイルを扱う方法について書きます。

背景

https://github.com/kumaS-nu/NuGet-importer-for-Unity
↑のプロジェクトでですが、NuGet のパッケージファイルである .nupkg という名前の zip ファイルを解凍したかったのでちょっと調べました。このプロジェクトは以下の記事で宣伝しています。
Unity のプロジェクトに NuGet のパッケージをインポートするエディタ拡張を作ったよ

結論

Assets 直下の csc.rsp というファイルに(なかったら作成し)
-r:System.IO.Compression.FileSystem.dll という行を追加する。

解説とか

私が珍しく結論からいったのはたったこれだけだったからです。では解説入ります。
 C# で zip ファイルを扱うのは、System.IO.Compression.ZipArchive クラスで、zip の解凍・圧縮をするのは System.IO.Compression.ZipFile クラスなのですが、ZipFile クラスの定義されている System.IO.Compression.FileSystem.dll はデフォルトでは参照されません!
 なので Unity では、 zip の解凍・圧縮はデフォルトではできません。逆に言えば、参照さえちゃんとできればいいのです。
 C# のコンパイルのオプションを csc.rsp というファイルに書くと、Unity はそのオプションに従って C# をコンパイルします。ここで、参照をする -r: オプションを使用することで参照を追加できるというわけです。…つまりいろいろ追加できるのか。ちょっとみてみよ。

追加できる機能

参照できるアセンブリは、path\to\editor\Data\MonoBleedingEdge\lib\mono\ 以下に、フレームワークごとにあります。ちょっとだけ覗きます。(.Net Framework では126個の未参照アセンブリがあったのでちょっとだけ。)

dll 主な機能
I18N.dll エンコーディングにShift-JIS等を増やす
System.Web.dll ASP.Net関連
System.Windows.Form.dll ウィンドウズのフォームを扱う

あとがき

正直、あまり使わないものなので動かないかもしれないけど面白そうだなとも思ったり。

参考資料

Discussion