見出し画像

mocopiで楽器ゲーム

ゲーム開発の同好会に所得しているのですが、同好会でmocopiというモーションキャプチャセンサを使ったリズムゲームMocodanceを作りました。その中のゲームの中で主に子供でも遊べるというのをコンセプトに、mocopiをつけて手足を動かす+ジャンプにより音を鳴らせる親子2Playerで遊べる「楽器ゲーム」を作りを担当しました。自分が工夫した点をメモに残します。

なんとご縁があってmineoのイベントでも活用いただけました


がっき機能開発

MotionDetector:Mocopiの個別センサが振られたかの判定

・楽器のアクションとしてmocopiの各センサを振ったかとジャンプしたかを検出しました。
・mocopiの個別のセンサのジャイロ情報取得は開発当初、通常手段ではできませんでした。最新版では有料で取れるようになったみたいです。そこで、mocopiのアバターのボーンに変換された後の関節の移動量から算出しました。
 ・手足、頭、お尻の関節の移動量を評価
 ・ジャンプは上方向(Z軸)に一定以上の速度で移動したかで判定
   ・ノイズ除去として一度検出したら一定時間は再検出しないようにしました。
   ・スペシャルアクションとして2人のPlayerの同時ジャンプも判定必要なのですが、実装都合上後述のSoundPlayer側でまとめました。

Sound Player:動きと連動した音の制御

・MotionDetectorの動きの検出と連動してSuoundPlayerで音を鳴らします
・音は音階と音色の2つで構成しています
  ・音階:手足4つで音が鳴るようにしています
      音階がある音色ではPlayer1の手足でドレミファ、
      Player2の手足でソラシドに別けて演奏できるようにしています。
  ・音色:ピアノの音、男の子用のSFな音色、女の子用のキラキラな音色、
      小さい子用のオナラなどの種類を用意しました。
      音色の切り替えはジャンプで切り替え
・MotionDetectorとSoundPlayerはPlayer毎に生成。Player番号を引数に動作
・親子同時ジャンプは本来は2Playerを統括するコントロラーが必要と思うが手間なのでSoundPlayerの中でフラグを持たせて暫定対応

パーティクルでの花火開発

ゲーム性も必要ということで、2人のPlayerがたくさん楽器を鳴らすことでゲージが増加、ゲージ最大の際に2人(親子)が同時にジャンプすることで特別なエフェクトとして花火が上がるという仕組みを入れました。

・デバイスが揺れる数をカウントしてゲージコントロール

ゲージの実装にはこちらの体力ゲージを参考に実装させてもらいました。
 【Unity】体力ゲージの実装方法の紹介 (一瞬で減る緑ゲージ+徐々に減る赤ゲージ) | ゴマちゃんフロンティア (gomafrontier.com)

・夜に変化

 花火を上げるために、シーンを昼から夜に変化させる必要がありました。
 Skyboxから背景色を黒にする。照明を暗く遷移。
 また照明変動に追従させるためにUnlit系ではないShadaerで対応しました。

・パーティクルで花火を上げる

・エフェクトのメインの花火はフリーのパーティクルエフェクトを流用させて貰いました。
  https://alert194.booth.pm/items/2318487
・エフェクト時間のコントロール、花火の量の制御
・適当な音をつけて完成

・レイヤーの前後関係に問題発生したため調整

 RenderQueueの値で前後を調整する必要があったため注意です
    数字が小さいものから順番に描画されるようになっています

アバターの作成

・あるキャラクターをアバターとして用意
・ガチャガチャのフィギュアを写真からフォトグラメトリで3Dモデル化しました(詳細は別機会に)
・Blenderでボーンを入れました
・データ量削減にメッシュ削減、テクスチャ解像度をリサイズ。
 Blenderでのリメッシュはテクスチャが上手くいかず断念

ゲーム内に参加者を投影

キーイング処理

正しくモーションキャプチャーできない子供の場合キャラクタの動きも破綻しがちなため、ゲームをしている子ども自身をキーイング(グリーンバックによる被写体切り出し処理)をすることでゲーム画面に登場するようにしました。
Unity上でのキーイング処理は凹みさんのキーイング処理を参考に使わせてもらいました。
https://tips.hecomi.com/entry/2018/10/21/022200

WebCameraのインスタンスをキープ

タイトルなどに遷移するとWebカメラのインスタンスが再度作られてキーイングなどのパラメータがリセットされてしまった。
シングルトンにして一度起動したらずっとキープする形に変更した。
https://sole-game-creater.com/unity-singleton-usage/



いいなと思ったら応援しよう!