【制作実習】HTTP経由でダンジョンデータダウンロード、目標達成

前回はZIPファイルのダウンロードまでだった。

今回、ZIP解凍に使うライブラリを SharpZipLib に変更したらアンドロイド実機でも問題なくZIPファイルを展開することができた。

画像はアンドロイドの実機で、HTTP経由で取得したZIPファイルを展開して取り出したファイルの内容を表示しているところだ。

見えにくいんだけれども、ちゃんとコリジョン情報など、マップツールで作成したデータが取れている事が確認できる。

SharpZipLibはこちらのサイトからダウンロード可能。

ライセンス条項が気になるところだが、俺自身の解釈で大丈夫と判断して使うことにした。
(あくまで個人の解釈なので、ライセンスについては自己責任で使用してください)

SharpZipLibは、サイトからダウンロードして展開したDLLをUnityのアセットフォルダに入れるだけで使えるようになる。

以下、保存したZIPファイルを展開する箇所のソースをフラットに記述しておく。

using ICSharpCode.SharpZipLib.Zip;

~途中略~

ZipFile zf = new ZipFile(filePath);		

foreach (ZipEntry ze in zf) {
	//ZIPファイル内のコンテンツ分ループする
	if (ze.IsFile) {
		
		string fileName = Path.GetFileName(ze.Name);

		//ファイルの読込ストリームを取得
		Stream reader = zf.GetInputStream(ze);

		//ファイル内容を受け取るバッファを用意
		MemoryStream onMemory = new MemoryStream();

		byte[] buffer = new byte[2048];
		
		int len;
		
		//ファイル読込ストリームからメモリバッファにデータを流す
		while ((len = reader.Read(buffer, 0, buffer.Length)) > 0)
		{
			onMemory.Write(buffer, 0, len);
		}
		reader.Close();
		onMemory.Close();

		//ディレクトリがあれば作成
		string destDir = Path.Combine(Application.persistentDataPath, Path.GetDirectoryName(ze.Name));
		
		if (!Directory.Exists(destDir)) {
			Directory.CreateDirectory(destDir);
		}

		//メモリに読込んだデータをファイル出力する
		File.WriteAllBytes(Path.Combine(destDir, fileName), onMemory.ToArray());
	}
}
zf.Close();

とりあえず、今週の目標は達成できたので、今日は早めに業務終了。

進めキノピオ隊長で遊ぶぜ、わはは。

今週の残り2日分は、次の作業に取り掛かってもいいんだけれども、いったん制作はとめて、これまで勉強してきたC++やらシェーダーやらの振り返りをしてみようと思う。

たまに復習しないと完全に忘れてしまうのでね。

4年前

コメントを残す

メールアドレスが公開されることはありません。