サンデープログラマーまつです。こんにちは。
ゴールデンウィークを利用して、自作のFitness音ゲーを作りましたので公開します!
SideQuestで公開中です。
https://sidequestvr.com/app/942/bmsfitness
The Fitness Game "BMSFitness" for Oculus Quest is now available!
You can read English explanation the below link.
https://github.com/jam0824/unitybm98v2#Download
- 【Oculus Quest】Fitness App「BMSFitness」公開【BMS】
【Oculus Quest】Fitness App「BMSFitness」公開【BMS】
Download
以下から最新版apkがダウンロードできます。
※非公式Appです。ご利用の際は自己責任でお願いします。
※横幅1.4mくらいを行き来します。ケガをしないようにご注意ください。
概要
Oculus Questの専用アプリで、音楽に合わせて飛んでくる弾を叩く、いわゆる「音ゲー」です。
また、ゲームでどれくらいのカロリーを消費したかもわかります。
音楽で楽しみながらやせられるゲームです。
この手のFitnessゲームはVRではBOXVRを筆頭に結構あります。
何が違うかというと「BMSファイル」を読み込んで使うという点です。
BMSは有志が作っている音楽を奏でるファイルです。
その昔ビートマニアのエミュレーション的なソフト「BM98」でとてもとても流行り、私もキーボードが壊れるまでプレイしたものです(しみじみ
話はそれましたが、有志が色々と音楽を作ってくださっています。
その曲を利用して遊ぶことができるわけです!
また歴史がある形式なので、すごーく昔の懐かしの曲なんかもあったりします。
紹介動画
使い方
1. Oculus Questの内部strageに"bmsfitness"フォルダを作成してください。
2. bmsfitnessフォルダの中に曲のフォルダを置いてください。
3. apk fileを Oculus Questにinstallしてください。
Android studioを使う方法や他の方法があります。手順が多いのでここは別サイトをgoogleなどで探してみてください。
私は使ったことがありませんが、以下のような方法もあるようです。
4. installが終わった後は、ライブラリ -> 提供元不明のアプリから「unitybm98v2」を選択してください。
(bmsfitnessの開発中のcode nameです。そのままになってしまった……)
5. アプリを起動すると、内部ファイルへのアクセスの承認を求められるので許可してください。
許可しないと設置した曲にアクセスできません。
6. これでゲームが起動するので、後はお楽しみください
遊び方
1. 音楽を選択します。右コントローラーのスティック左右でレコードが移動します。
2. レコードを手に取ることで「曲選択」ができます。
3. 選択後は右コントローラーのAボタンで曲が始まります。
4. 曲が始まると弾がいっぱい飛んでくるのでタイミングよく叩きましょう。
弾を交互の手でたたくと"Excellent"評価になり、Greatの10倍のスコアが入ります。
ライフバーがゼロになったらゲームオーバーです。
5. 曲を途中でやめたい場合はBボタンを押してください。曲選択画面に戻ります。
カテゴリーの作り方(20200516バージョンで追加)
多くの曲を持っていると、プレイしたい曲を探すまで時間がかかります。
そこで「カテゴリー」機能を追加しました。
AnimeやGameといったカテゴリーにわけて曲を管理する機能です。
1. 「bmsfitness」フォルダの中に「categories」フォルダを作ります。
2. 「categories」フォルダの中に、「Anime」や「Game」といったカテゴリーのフォルダを作ります。お好きな名前で作ってください。
3. ゲーム中では画面上にある「Category : None」と書かれた場所にレーザーを当て、右コントローラーのトリガーを押してください。
4. カテゴリーのリストが現れるので、そこからカテゴリーを選択してください。「None」を選択した場合は「bmsfitness」フォルダ直下の曲が表示されます。
ランダム選曲(20200620バージョンで追加)
選択しているカテゴリー内でランダム選曲をする機能を実装しました。
左を向くとあるかと思います。
それぞれLevelが書いていて、選択するとそのLevel内からランダムで選曲されます。
BM98のUI
他、20年前の「BM98」のUIも実装しています!
個人的には思い入れが強いので!
高校の時、どれくらいプレイしたのやら><
後ろを振り返るとでっかいTVがあって、その中にBM98のUIを再現させています。
画像についてどうしようかと思っていたら、なんとBM98きくちゃんバージョンを作ったご本人、きくちゃん様から「いいんじゃない~」と言っていただきました!
左右の矢印にカーソル(右手から出ているビーム)を合わせてトリガーで曲が移動します。矢印以外の場所でトリガーをすると曲が決定されます。
消費カロリーについて
消費カロリーは1秒間に2回打つという運動で6METs(METs : 運動の強さ)を基準として計算しています。(0.5秒のパンチ2発ですね)
6METsは美容体操やゆっくり走る、ゆっくり泳ぐくらいの運動です。
ハイキングよりは低いかな、くらい。
これを基準に、時間当たりに何回弾を撃ち落としたかでMETsを計算しています。
消費カロリーは以下の計算式で求めています。
消費kcal = METs * 体重(kg) * 時間(h) * 1.05
体重には現在の私の体重68kgが入っています。
この式から考えると、Oculus QuestにあるFitnessゲームの消費カロリー表示はかなり盛っているのがわかりますね(^-^;
けどまぁ、この値を見ると「こんなに動いたのに消費カロリーこれだけ……」ってなりますよね><
GitHub
GitHubもおいておきます。
プレイ動画
TO MAKE THE END OF BATTLE
三人称視点での撮影
Final Fantasy4 battle
Last! Least! Regrets!!
Welcome Mr.E-R
瑠璃子 JV-1080Mix (2nd Mix)
仕様について
http://www.charatsoft.com/develop/otogema/page/04bms/bms.htm
これを見ながら作っていました。
ファイル形式
ファイルを見ていたらShift-jisとutf8が混在していたので(歴史が長いですものね…)、文字コードを自動判別して読み込んでいます。
音声形式
音声データはwav/oggのどちらも対応しています。
たまにbmsファイル内はwavで書いているのにファイルがoggだったりする曲がありましたが、フォルダ内の音ファイルを確認して自動で選択させています。
ヘッダー
ファイル内のヘッダは以下を使っています。
- #GENRE
- #TITLE
- #ARTIST
- #BPM
- #PLAYLEVEL
#BPMは小数点に対応させています。
アニメーションファイル形式
bmpを想定して作っていますが、jpgやpngなども読み込みます。
ただ、bmsファイル内でbmpと書いているのにファイルがjpgなどの場合は処理されません。
メインデータ
対応チャンネルは以下です。
- 01 : BGM
- 02 : 小節の長さ変更
- 03 : BPM変更(※ただ、タイミング変な気がしている…)20200505バージョンで修正
- 04 : 画像表示
- 11 ~ 29 : 5key / 7key対応
- 51 ~ 59 : ロングノーツはBGM(01)にしてしまっています。
Oculus内の曲ファイルについて
ストレージからの音楽ファイル読み込みは普通にはできなかったので、wwwといurlを使った回避方法で読み込んでいます。
ただ、音ファイルには「#」「+」といったURLに使うと意味を持ってしまう単語が使われています。
これらはURLエンコードでも対応不能だったため、ファイル名を自動変更させています。
bmsファイルも#が入ったファイルを読んでいる時はコードを読むときに読み替えています。
mpgについて(20200510バージョンにて対応)
このゲームではmp4は対応していますが、mpgは対応していません。
なので、mpgをmp4に変換する必要があります。
mp4に変換した後は、bms/bme/bmlファイル内の#BMP "filename"の部分を修正する必要があります。
Avator modeについて (20200524バージョンにて対応)
三人称視点で撮影したためだけに、Avatorを追加しました。
oculus questの左手のスタートボタン(真ん中についているボタン)でアバター表示を切り替えられます。
Oculs Questでの三人称視点の撮影は以下を参照してください。
https://developer.oculus.com/documentation/mrc/mr-quest-rigs/
キャッシュについて (20200620バージョンにて対応)
フォルダ構成が変わらない場合、キャッシュさせて素早く表示できるようにしました。
新しい曲のフォルダを追加すると、キャッシュはクリアされ、再読み込みします。
また、任意にキャッシュを消したい場合は、キャッシュを消したいカテゴリー内のlistFolder.csvとlistMusicDict.csvを削除してください。
既知の問題点
- 03:BPM変更について、弾の速度調整で実現していますが、タイミングがうまくいっていない気がしています。20200505バージョンで修正。譜面作成時に調整させてます。
- スペースが入ったファイルはうまく読み込めないはず
- #TITLEなどのヘッダーが#WAVより下にあると読み込みません(実装直せばいいだけだけど)
ソフトウェアテスト研修用のテスト対象にも考えてみたい
こいったゲームのテストはどうすればいいんだろう……。
それを考えるための題材にしたいとも思っています。
実際に実行するテストはOculus Questが必要になっちゃうのでできないけれど、テスト計画、テスト分析、テスト設計段階の話はできるのではないかと考えています。
そのためにはしっかり仕様書を起こせば使える……かもしれませんね!
更新について
マンガ活動もあるため、更新はまたコードが組みたくなった時になるかと思います。
使用音声
効果音ラボ様の音声データをゲーム中で使用しています。