備忘録_VRChatで弾を飛ばすまで
(2020.8.7 追記 Avatars3.0リリースに伴い各種変更がありそうだ…勉強しなおしだな)
6月ごろからVRChatに触れているが、アバターに色々仕込んでいる人々を見て自分もやってみたいと思ったので試してみることにした。
目標設定:アバターに鉄砲を持たせて、そこから任意のタイミングで弾を飛ばすこととする。
別に鉄砲にこだわりがあるわけではないが、これが出来るようになれば魔法とか花吹雪とか花火とか、別のものも作れるだろうと思い、まずはこの目標設定とした。
少しずつその時々分かったことをTwitterでつぶやいていたが、見読性に欠けるので一つの記事としてまとめることにした。つまりこの記事は、越えるべき段階別に分類した役に立ちそうな記事へのリンクと、その時々理解したことを記した自分用の備忘録である。適宜更新するつもりだったが、めんどくさがりなので多分これ以上は更新しないと思う。
0.基礎知識
基本的に私はUnityを触ったことがない人間なので、大まかな流れを掴んでおかないと爆死することは不可避である。実際に作業を行った偉大なる先人の方々の記事を読んでみた。以後の項目は全てこれらの記事を前提としている。
備忘録:アバターから何か出す方法について分かりやすそうなサイト https://t.co/CKaUhy7P1o
— オズワルド (@salbam3) July 28, 2020
備忘録2:何か飛ばすためのエフェクトのベースになるものはどうやら売られているようだ https://t.co/YBYhsc3v3R
— オズワルド (@salbam3) July 28, 2020
1.アバターに鉄砲を持たせる
鉄砲そのものはBooth等で素材データが販売されているので適宜購入する。
Unityに読み込み、持たせたいアバターの手のボーンへ配置すれば、手に追従して動いてくれる。
2.鉄砲の弾を準備する
鉄砲の弾は、Unityのパーティクルシステムという機能を用いて、それらしい物体が移動するエフェクトを作ることで用意できる。また、Unityのアセットストアでも作成済みのパーティクルを購入することが出来る。
3.鉄砲から弾が出るようにする
何らかのトリガーにより、弾のエフェクトを再生させるようにすれば良い。表情を変えたときに色々発動するような仕組みを作る。表情を変えるためにはアニメーションオーバーライドという仕組みを利用する。
つまり、オブジェクトにアニメーターコントローラー(DVDプレイヤー)をセットして、その中にアニメーションクリップ(DVD)を挿入したら、DVDの内容通りにオブジェクトが動いてくれると
— オズワルド (@salbam3) July 28, 2020
そのDVD作りが死ぬほど大変でセンスが要るわけだ タイムラインに素材をセットして時間経過で動かしたりすると
— オズワルド (@salbam3) July 28, 2020
要らない知識と割り切らずに順番にやっていかないと基礎知識で詰みそうだ。表情を変更して設定するところからはじめよう https://t.co/HriiMRbJvJ
— オズワルド (@salbam3) July 28, 2020
そのうえで、ローカルではなくワールドで弾を正しく動かすための工夫が必要になる。
空き時間で色々調べて分かってきた。①パーティクルシステムというものの設定を上手くいじれば銃弾でも火花でも魔法陣でも、エフェクトを作れる。②パーティクルをONにするアニメーションを作り、それをアニメーターコントローラーで制御すれば、任意の物体や身体からエフェクトを出せる。
— オズワルド (@salbam3) July 29, 2020
③ローカルではなくワールドでパーティクルを上手く動作させるためには一手間必要。(今は記事とは別の方法が主流?)https://t.co/UUm5H360Gk
— オズワルド (@salbam3) July 29, 2020
今はConstraintという方式が主流らしい。
https://note.com/berylmoon/n/neb481c4f1f9d
https://note.com/berylmoon/n/nc00ca751876b
別方式だがこのサイトも参考になりそうだ。
4.鉄砲を出し入れ出来るようにする
これはgatosyocora氏が作成し無償で公開して下さっているEmoteswitchというギミックを使えば簡単に実現可能。Emoteの中にオブジェクトを出し入れするボタンが追加される。
しかし、このように仕込んだ武器から弾を発射させるには一手間必要になる。
④Emoteswitchに仕込んだ武器からアニメーションオーバーライドでパーティクルを発生させるのも一手間必要。 https://t.co/ODMU2WgRcX
— オズワルド (@salbam3) July 29, 2020
昨日の時点では、アバターにEmoteswitchを適用して火縄銃を隠し持たせること、火縄銃が出現した瞬間にパーティクルを再生させることまでは上手くいった。パーティクルの中身を変更することで弾を撃たせることは可能だが、このままだと連射したい時は銃を出し入れしないといけない悲しい仕様になる
— オズワルド (@salbam3) July 29, 2020
④により取り出した武器のパーティクルを別途再生出来るようにすることで、弾の連射が出来るようになる。後③をすることで弾が真っすぐ飛ぶはず
— オズワルド (@salbam3) July 29, 2020