見出し画像

webで遊べるBMSプレーヤーを作ったよ

まーた飽きずにBMSプレイヤー作ったんかおまえ。
もう累計5つめくらいじゃないか。wosdergeです。

↓つくったのはこちら あそんでみてね。

前にBMSについて書いた(そして物議を醸した)記事はこちら。

■Featuring

◆ブラウザ上で動作する事

これに関してはぶっちゃけ今フィーチャリングする事でもないですが。
というのも8年くらい前に登場したBemuseですでに実現している事なので。

ただ、Bemuse、忌憚なく言うとBMSプレイヤーとしてはちょっとクセが強くて、ゲーム仕様が。clear/failedの概念がなく純粋なスコア勝負だったり、細かい用語が音ゲーのデファクトスタンダードからは乖離してたり。なのでforgetalia Rはそのあたりを今の"標準的な"音ゲー(リズムゲー)には準拠させてます。

◆unityroomというサイト上に配置している事

Bemuseは独自のドメイン上に存在していて、これはこれで強みはあるのですが、導線という意味では外部からの流入が少し難しい側面がありました。

unityroomはなんやかんやそれなりに長く続いている「ブラウザで遊べる無料ゲームサイト」としての地位を持っているため、このプラットフォーム上に置けば外部からの流入もある程度は期待できるのではないかと。希望的観測? そうですね。

◆Adressablesの採用

により、zipファイル落として回答してごにょごにょ……なんてせず、すぐにブラウザ上で遊べます。仕組みとしては、初めて遊ぶ際に該当データをローカルに落としているので2回目以降はダウンロードを介さずスムーズに遊べるようになります。また、unityで扱うための1ファイルとしての最適化が行われていることになるので、ロードも比較的早いです。

◆選曲

俺の趣味。

いやなんかそりゃスマホとかブラウザで遊べるゲームは多いんですけどどれもこれも似たり寄ったりな選曲というかもうシャイニングスターはいいだろ

思想的な話になりそうだからあまり書くのはやめておこう。でもおれは南雲御大の「音ゲーで新しい音楽に出会う」思想を大事にしたい。

■技術的なこと

◆webGL上での動作

……は、今のwebGLなら何も問題はない。unityばんじゃーい。

◆unityroom上でのAdressablesの適用

いかにしてunityroomのプラットフォーム上で大量のBMSデータを扱うか。今回一番関門だったのがこれです。unityroomでは直接隣にaddressables用のassetbundleを含めることはできません。かといって、本体にBMSのデータを全部入れるととんでもない容量になってしまう。また、他の鯖にデータを置くにしても、unityroomとのCORSを解決する必要があります。

最終的に、こちらの先駆者を参考にgithub pagesにBMSを置くことで解決しました。ただ、githubをこういう使い方していいのかは怪しい。猫缶鯖がCORS許容すれば解決するので猫缶様の靴を舐めに行くか……。

なお、BMSを完全に外部データとして切り離したので、BMSを新たに足すだけの場合本体の更新をせずに済みます。

◆独自のDBとunityroomランキングの使用

独自のスプレッドシートを用いたDBを使っています。多少レスポンスの遅さはありますが、十分使える印象です。また、ユーザ全体のスコアを計算し、unityroomのランキングに適用してあります。

◆bmson対応

webGLだとながーい音声データをプロシージャルに切ることは出来ないので、「特定部分を再生する」手法で再現しています。次の音のはしっこが末端に出てしまうのではないかとかそのへんの懸念はありましたが、試したら案外うまくいったでござる。

◆譜面形式について

画面を見る通り、DFGHJKの6レーン構成です。
つまり内部の譜面情報は5keyとほぼ同じです。何なら5鍵BMSはそのままだったりするのも。唯一5鍵との相違点として、左皿基準で変換しています。色々試したがDFGHJKだとキックを左薬指にするのは負荷がでかい。

■これから 

ひとまず形になったので今後どうするか。

◆設定の充実

やります。キーコンフィグとかユーザ名更新とか……

◆スマホでも遊べるように?

やれるかわからないがやってみます。3つ以上の同時押し平然とあるけどまあええや……

◆弐寺に寄せる気はなく、専コン対応予定もなし

これまでのBMS、iidx層とは違う層へのリーチが目的なので。
専コンでやりたいひとはbeatorajaを使えばよい。


暫定記事なので充実させていきます。

この記事が気に入ったらサポートをしてみませんか?