こんにちは。今回はとあるシミュレーターについてのお話です。

この前、ミリシタのシミュレーターを落としてみたんですが、なんとも残念な結果になってしまったというお話です。

一応、テスト動画を上げておきましたのでよろしければどうぞ。
まぁこんな底辺が上げる動画誰も見てくれないと思うけど

これなんですが、悲しいことに譜面が作成できません。
というのも、なぜ譜面が作れないのか?

理由は単純です。

譜面ファイルがAssetBundleなんです。

え?どういうこと?
そもそもAssetBundleって何?ってなると思いますが、簡単に説明しましょう。

AssetBundle(アセットバンドル) とは、unityで作成されたゲームであれば必ず存在するいわばアセットファイルです。 そのまんまじゃん

unityで作成されたゲームは、AssetBundleと言われるものがあり、その中に格納されているのがゲーム内で使用されているアセットファイルです。
AssetBundleには複数のファイルが格納出来るようです。まぁwindowsなんかでいうzipアーカイブとかそういう感じだと思います。
ミリシタなんかでは {ファイル名}.unity3d.assets という感じで格納されていることが多いです。

こんな感じで、よくゲームアプリのフォルダを開いてキャッシュフォルダ内などにある、ファイル名がハッシュ値だけになっているファイルがそれです。
これらのファイルはUnityのAssetBundleであり、Unity Assets Bundle Extractorなんかで抽出可能です。

ミリシタはunityで作成されたアプリです。追加ダウンロードされるファイル名には全てハッシュ値が使われているので譜面ファイルを見つけ出すのはかなり面倒です。

今回の目的は、キャッシュフォルダの中に残ったAssetBundleの中に格納されている、unity3dファイルを持ってくるのが目的です。

ミリシタの譜面ファイルはAssetBundleの中にscrobj_XXXXXX.unity3d.assetsという名前で格納されています。

では、どうやって目当てのファイルを見つけるのかと言いますと

1.ゲームを起動しキャッシュの削除を行う。

2.ダウンロードが終了したら、取り出したい譜面の曲を
オートライブパスかなんかを使って開始する。

3.左下のダウンロードゲージが消え、ライブが始まったら即ポーズし
ファイルマネージャーでアプリのキャッシュフォルダを開く。

4.キャッシュフォルダ内に溜まった適当なAssetBundleを開く。

5.バイナリエディタの検索機能で fumen と打って検索。

6.見つかればそのAssetBundleが譜面ファイル。
見つからなければそのAssetBundleは違うファイル。

これだけです。要は手当たり次第にAssetBundleを開いて検索機能でそのAssetBundleがなんのファイルなのかを調べるわけです。
これがかなり大変です。一つの譜面を見つけ出すのにかなり時間がかかりました。なんせファイル名は全て16進数のハッシュ値ですし、フォルダも 00~ff までありますからね。
つまりバイナリエディタ内で調べない限り、何のファイルかは見当もつかないということです。
全て確認していたら日が暮れるんじゃないか、そんなレベルで効率は最悪な探し方です。

ちなみに最初に登場したテスト動画のunity3dはこの方法でキャッシュに残ったunityのAssetBundleから取り出したものを使用しています。つまりなにも変更していない本家の譜面というわけです。

譜面ファイルを探し出すのはかなり面倒ですが、音楽の抽出は拍子抜けするぐらい簡単です。ADX2/song3/内にsong3_{曲名}.acbというファイル名で音楽が格納されています。
vgmstreamを入れていればfoobar2000でそのまま再生できるので、Quick Convertなりで他の形式に変換できます。

話を元に戻しますが、ほかのシミュレーターはテキストファイルなんかで簡単に譜面が作れます。(バンドリとかデレステとかは)
なんならデレステやバンドリのシミュは譜面作成ツールなんかもあるので、ある程度の知識さえあれば創作譜面を作った事がない人でも簡単に創作譜面を作成することが可能です。

しかし、ミリシタのシミュはゲームで使用されているAssetBundleしか読み込めない(読み込む方法もあるんだろうけど)為、無理なんです。
要は、AssetBundleをそのまま読み込んでいるので、AssetBundle以外のファイルは受け付けません。

は?だったらAssetBundleを作っちゃえばいいじゃん!って話ですが

無理です。

そもそも筆者はunityを触ったことがないので譜面ファイルからAssetBundleに再構築する方法なんて知りません。
AssetBundleというものは、バイナリなのでメモ帳なんかでは当然編集なんかできませんし、バイナリエディタで編集しようとか思っても無理です。


AssetBundleの構造。

じゃあ、Unity Assets Bundle Extractorで抽出して中の譜面ファイルを弄ればいいじゃん!ってなりますが

無理です。

unity3dから元の譜面ファイルに戻す方法はない(らしいので)簡単に弄ることはできません。
それに仮に抽出できて弄れたとしても、再度unityのAssetBundleバイナリに戻す必要があるので、創作譜面を作るのはなかなかハードル高いです。

確かに、Unity Assets Bundle Extractorを使用すれば中のデータは見ることができます。ただ複雑すぎるし、仮に抽出できたとしても元に戻せません。

ただ気になるのは、ミリシタ創作譜面を実際に作成してアップしている方はいらっしゃるので、なにか弄る方法でもあるんでしょうかね。気になるところです。

という訳で、unity3dを弄る方法はないわけですが、本家の譜面であればシミュで再生することは可能です。
ただ、予めAndroidか脱獄したiPhoneを用意しておき、Androidならファイルマネージャー、iPhoneならFilzaなんかでミリシタのデータディレクトリを開き、
その中のキャッシュフォルダの中から、先ほど説明した通りハッシュ値だけのファイルの中から探し出してそれをPCにコピーしないといけません。
私はAndroidとiPhoneを持っているので、メインのiPhoneは脱獄はしなくても大丈夫でしたが。

このように、かなり面倒くさいことをしないと譜面ファイルは手に入りません。
それに苦労して手に入ったところで、本家の譜面なので面白味も何もありません。シミュレーターって言ったら、やっぱり創作譜面を作ってそれをアップすることが楽しみだと思います。
なんの変哲もない本家の譜面をシミュレーターで再生したところで、面白くないです。
デレステみたいに譜面エディターみたいなのが出れば、また違うんでしょうけどね。今後に期待したい限りです。

余談ですが、作者の方のGithubを見るとdllがあります。説明は英語ですが、読んでみるとそのdllを使用するとunity3d以外の譜面も読み込めるようになる
的なことが説明されているようなんですが、そのdllの適用方法がどうやってもわかりません。
リポジトリからソースをダウンロードしてビルドし、アプリケーションと同じところに置いているのですが、読み込めるはずもなく…

ymlファイルを弄って色々検証してみましたが、どうやっても無理なものは無理です。うーん、これができれば譜面も作れるはずなんですが。
なんせ、情報が少なすぎてわからないことだらけです。

とりあえず、引き続き検証していきたいと思います。なにかわかれば追記しておきます。

以上です。


0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。
(スパム対策)