Unity で Zip を扱う
概要
この記事では、Unity で Zip ファイルを扱う方法について書きます。
背景
↑のプロジェクトでですが、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