見出し画像

unityで3Dモデルにギタフリをやらせた話

前回の間接的な続きです。
前回の記事はこちら↓


この2週間マトモに配信もゲームもやらずにこんなもん作ってました。

今回は桜桃ちゃんにギタフリをやらせるまでのお話です。

最初は記事にするつもりなかったので画像少なめな上に特に分割もしてないのでクソ長文章のクソ記事です。


事の発端

Vtubeの文化が根づいてしばらくした頃にこんな事思っていました。

3Dモデルに音ゲーをさせたい

フルトラッキング出来る環境があればDDRはできるだろうけど
そんな金あったら別の事に使いたいし、当時はそもそもおうちDDRが稼働すらしていませんでした。

他のゲームもモデルの指動かせんし「まあ無理だろうな」で終わらせていました。


時は変わって現在、前回の記事で桜桃ちゃんを弄ってた時に「VMagicMirror」の存在を知ります。

知らない人に説明すると、フェイストラッキングの他にキーボードやパッドの操作を拾ってモデルを動かしてくれるというもの。
(他にも機能はあるけど割愛)

右手はマウス操作、左手はキーボード操作なんて動きが出来るソフトなんですが、これを見て思いつきます。

VMagicMirror使えばギタフリ出来るのでは?

割とシンプルめな操作の弐寺でもなんだかんだで「完全固定」というのは少々難しいので(少なくとも自分は無理)
DDR以外は難しいと考えていました。

思いついた当時ギタフリにハマっていたというのもありますが
・ギタフリは基本的に特殊な動きは必要ない
・ネックの5ボタンはポジションを変えてやればそれっぽい動きは再現出来る
・VMagicMirrorで左右の手を別々に動かせている

以上の事からコントローラーのみで完結出来ると考えた訳です。

ワイリングなどの特殊な動きはありますがコナステ版なら無くてもほぼ問題ないので今回は無視します。

で、調べてみると思ったより安い値段でどうにか出来そうな事が発覚。

ということで桜桃ちゃんアップデートが終わったら手をつけようと心に決めました。


あ、桜桃ちゃんも揺れもの設定つけたのでちょっとだけアップデートしました。


ギターコンモデルを作る

とりあえずモーション作ろうにも目安になるものがないと始まらないのでまずはギターコンを作る事に。
ちなみにVroidとかを除いて3Dモデルは完全未経験

当然ながらこんなマイナーゲーのコントローラーモデルなんて作ってる人はいないわけで。

デバイスが割と似てる「ギターヒーロー」のコントローラーは作ってる人がいて
最初はそれ使おうかなと思ったんですが、配信で使っていいのか分からず結局自作する事に。

もちろん未経験の自分が1から作れる訳ないし、最低限ギターコンというのが分かればいいので既存のモデルを弄って作りました。
元データはこちら↓

値段が安かったのとギターコンの形に近かった事からこちらを購入。もちろん配信でも使えるし改変可能。(重要)

で、いじるにはソフトが必要なわけですが、調べたらSteamで無料で(!!)使えるソフトがあるのでそれを利用。

早速作成に取り掛かります。

弦とかアームとかいらない物をどんどん削除していきます。

で、本題はここから。
どうやって物を追加するのか。

ネックボタンの方はまだ長方形の物を埋めるだけで良かったんですが、問題はピックレバー。
結構丸っこい形をどう再現するか。

とりあえず長方形置いてから削ればいいやと考えてたんですが、調べても削り方が出てこない。

じゃあとりあえず三角形っぽいの作って…?
頂点はわかるけど線と面とは…?と格闘する事数時間。

何とかそれっぽいのが完成しました。

完成品がこれ
ネックボタンは分かりやすく色を付けてみた
もう一度言っておくがモデルを拝借して作ったもの

頂点と線と面を理解して、どう作ればいいかというのが見えてしまったのでレバーの枠も一緒に作ってしまいました。
これ無ければもう少し早く完成できた。

モーション作り

目安が出来たのでモーション作り。

作り方が色々あって使いやすいフリーのソフトがあったりしたんですが、結局Blenderで作ることに。

今回作ったモーションが
・ネックポジション違いの基本ポーズが2種類
・左手の各指の押したモーションで4種類
・右手のアップ、ダウンで2種類
の計8種類。

ちなみにこの時はこれで行けると分かってる状態じゃありませんでした。行きあたりばったりですね。


で、モーション作りは意外に苦戦しませんでした。

というのもそもそもそんなに大きい動き、長い動きじゃない事と、やってる事自体は動画作成に似ているからです。

勝手が分かればあとは簡単。ポーズ作って、指曲げてキーフレーム打って……

ピック側どうしよう……

音ゲーや弦楽器、打楽器やってる人なら分かると思うが単発の音なら基本的に押し続けない
手拍子だって叩いたら大体の人は手が離れてるはず。

ギタフリのゲームの性質上ピック長押しも存在しないので
押してる間モーションを動かすというのはほぼ不可能

さらに曲によって速度が変わる事を考えるとかなりシンプルな動きにしなければならない…


というのを考えるのを後回しにて
とりあえず上下に動かして、手首を返すモーションにしました。

この時は「違和感があれば後で修正すりゃいいや」くらいで作ってます。

とりあえず動かせる状態まで持っていくのが大事。

その時のポストがこちら


Unityで色々する

上記の通りここに来て衝撃の事実が発覚します。

VMagicMirrorだとやりたい事が出来なさそう

VMagicMirrorはモーションデータさえあれば好きな動きをさせられるんですが
使う事を想定していた「ゲーム動作」を試しに使ってみるとモーションがぶった切られてる

要は「歩きながら銃を撃つ」的な動きは出来ないと何となく察した訳です。(出来たらごめん)
表情とかに使われるブレンドシェイプというやつですね。

調べる限りキーマウやパッドなどの項目に新規追加も出来なさそう…

まあここまで作っちゃったし、調べた感じ「Unityで配信環境は作れる」というのは分かってしまったので
「せっかくだから最後まで自作しちゃおう」と考えました。

ちなみに当然ながらUnityは前回で服を着せた程度、Unityのプログラム言語である「C#」も初歩の初歩くらいしか触ったことがないです。
はるか昔にC++も勉強したことあるけどこちらも触り程度かつあんまり覚えてない。


アニメーションを作る

個人的に一番苦戦した所。

ここはモーション制作と同時進行でやってたんですが、fbxファイルのモーションデータを抜き出す方法がわからない

正直ここだけで1時間使ったかもしれない。

fbxファイルをHumanoidに変えて…?
モーションデータ移動できないんだけど…??

まあ複製すれば解決する話だったんですけどね。


問題は続きます。
モーションの再生の仕方がわからない

AnimationとAnimatorで似たような単語が並んでるし、そもそもどうやってモーションを再生出来ればいいんだ…?

まあAnimatorにモーションファイルをぶち込めば解決できる話です。

さらに調べていく内にアバターマスクを使えば特定の部位だけその別モーションに出来ることを把握。

さらに調べるとモーションの移行条件付けまではUnityで出来る事も発覚
条件付けをプログラムしなくていいなんて便利ねぇ…

そこからは「どうすれば思い通りの事が出来るか」がはっきりしたのでかなりスムーズに作ることが出来ました。

結果的に作ったモーションは全部無駄にならずに良かったね!(他人事)


ギターコンの入力を受け取るプログラムを作る

条件付けまで出来たのでフラグを変化させるプログラムを作る作業へ。

実は条件付けについて書いてあるページにフラグを書き換えるサンプルコードもチラッとみたのですが…

(スマートじゃないけど)全部if文だけでどうにかなりそう
プログラムをほとんど覚えてないとはいえ、流石にif文くらいは覚えてますよ。
(特定の条件の時にこの処理をしてねってやつ)

で、ギターコン、というかKONAMIの音ゲーコントローラーは大体DirectInput方式(知らない人はググれ)なので、ボタン番号さえ分かれば対応したフラグのオンオフするコードを書くだけ。

そうしてギターコンの入力を見てアバターを動かす事に成功します。


バックグラウンドで動くようにする

コード書いてから気付いたのだが、UnityEditorってバックグラウンドでパッド入力を受け付けないらしい。

調べた限りDirectInputの入力をバックグラウンドで受け取るようにするには手間がかかりそうと判断。

キーボード入力なら楽に行けそうだったので諦めてJoyToKeyを使う事に。

それに伴いコードを全部書き直し。
Assetを導入する都合上、書き方が大きく変わるのでサンプルコードを丸パクリしました。


う、動かねぇ…

何が悪いんだか全くわからないので、とりあえず手当たり次第に色々やってみるもダメ。

で、色々調べてみるとマグロナさんがボルテコンのモデルを作った時のコードを発見。

自分のやりたい事とほぼ一緒だったので丸パクリする事にしました
パワープレイにパワープレイを重ねる愚の骨頂。

が、それでも動かない。

「なじぇ…」と思いながらネットの海に潜ろうとした時に気づきます。


むしろバックグラウンドじゃないとキーボードが反応しないという事に…


え、じゃあ今までの事全部無駄だった可能性が…?


なんかしらんけど想定した動きになってるからヨシ!


ちなみにギターコンの動きはこんな感じ
両端のボタンでポジションが変わるようになってます。



ちょっと気になる所

まずパッと見える所だと右手の動きがまあまあ不自然

わかりやすくする為に手首を返すようにしたけど、正直いらんかったかもしれん。

今は弄って多少マシになったのだが、まだ元のポジションに戻るのが早すぎるのでもうちょい弄る必要がありそう。
もちろん連打に対応させる。


それに関係する話ではあるのが腕から下しか動かないから機械っぽさがすごい
何なら瞬きすらしない。

「ユニティちゃんのウェイトモーション使えば?」と思ったけど、VMagicMirrorは多分ウェイトモーション使ってないけど人間味がある。

まあ要は体も動かせるようにしたいって話です。

Unity上だとワイリングのセンサーはボタンの1つらしいので上手く使えないかなと考えてます。

あとシンプルにフェイストラッキングを付けてみるとか。


次に左利きで作れば良かった気はする。
いざゲーム画面と合わせてみると譜面とボタンが反対になってるから直感的に分かりづらい。

カメラの反転機能使えばいいんだけどアシメカットだから違和感が…


あとはギターコンの話。
グリーンバックでクロマキー当てる事を想定してなくてネックボタンが透ける

OBSに映す用の「UnityCapture」が透過に対応してないのでギターコンのモデルを変更する必要あり。

まあマテリアルの色変更するだけで終わるんですけどね。


おわり

今回作った物は今のところ配布予定はありません。

・ギターコンの元のモデルが再配布禁止
・まだまだ修正点が多い
・そもそも需要がない上に大半の人がVMagicMirrorで事足りる

以上の3つが理由です。
低クオリティなアニメーションデータなら配布は出来るんですけどね。


というわけで桜桃ちゃんにギタフリをやらせた記事でした。
多分今後も地味に修正していくと思います。

今後使うかは知らん

配信でも1度使っていて記念としてアーカイブを残してます。
観たい方はこちらもどうぞ。何があっても責任は取れません。





VMagicMirrorってオープンソースだから今回作ったものを上手くぶち込めば全部解決するんじゃね?

オチあったぞ



(10/11追記)間違った言葉を修正しました

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