見出し画像

【VRC備忘録】アバターに仕込めて叩くと音が出るアイテムの作り方

◎はじめに◎

※2022/07/25時点でこの記事は古い技術を用いています。現在のVRCはPhysBone及びContactの導入により他者のコライダーに対してアクションが行えるようになりましたので接触判定を拾うことも容易となりました。

しかしながらこの技術は床や壁などのコライダーに反応して音が出るため、相変わらず有用な場面はございます。どうぞご参考にしてください。


普段はVtuberをやらせてもらっているヴィランVtuber Vain様だ。

今回はアバターに仕込めてかつコライダー判定で音が出るアイテムの作り方ということで記事を書かせていただく。そもそもそんなの沢山ありそうじゃない?と思われるが意外や意外、ほとんど見かけません。

何故かと言うと現状アバター自体にはDynamicBoneを除いたスクリプトを仕込むことが出来ないのである。ワールドに置いてあるアイテムはスクリプトを仕込めて叩くと音が出るためそちらのが断然見かける。ということでアニメーションやパーティクルを駆使して今回は音が出るアイテムを作っていくぞ!

ちなみにこの技術を教えてくださったお方も、発表したけどあまり注目されなかったと仰ってたので未開の部族に伝わる伝承みたいなレベルで技術としては昔からあった模様…もっと流行ってほしい。



◎準備◎

画像1

今回は俺様も愛用している自作の長ネギを使う。これ自体は配布していないので皆さんはお手元にある適当なメッシュとかに仕込んでもOK!

そしてVRCで使う前提ならばVRCSDK3を先にインポートしておこう。


画像2

アイテム自体の構造はこのような形になっている。このシステムのミソはパーティクルシステム(当たり判定)の子に音源があることなのでココだけは気を付けて頂きたい。

※分かりやすいように(Hit Box)という名前を付けているだけのParticle Systemです


画像3

次にパーティクルの位置を当たり判定にしたい位置に移動させて準備完了。このネギの場合は大体先端から色が変わるあたりまでを当たり判定にしたいので位置を調整した。



◎設定◎

ここからはパーティクルの設定と音源の設定になる。気を付けるべき点が多いので見落としが無いように気を付けて頂きたい。

画像4

まずはパーティクル(当たり判定)の設定から。当たり判定がその場から動かれたら困るので[Shape]のチェックを外したのち設定していこう。赤線の部分が特に重要なのでそこに絞って説明していく。


Looping…オフにしておこう

Start Lifetime…べらぼうに高い数値に。でないと勝手に音がなったりする

Start Speed…0にしないと当たり判定が勝手にどっかいく

Start Color…α値(透明度)を調整して完全な透明にしよう(本記事では分かりやすいように透明にはしていません)

Play On Awake…デフォルトでオンなのでそのまま

Max Particles…1個のみ

Stop Action今回のシステムの根幹を為す部分。[Disable]にしよう


Stop Actionが[Disable]であるとき、パーティクルシステムから発生したパーティクルが消滅すると同時になんとパーティクルシステム自体が非アクティブ化する。この仕様を用いることが全ての根幹なのでここまで書くと勘のいい人はもう分かったのではないだろうか?


画像5

次は[Collision]にチェックを入れ設定していこう。[Type]はworldで設定していく。

Dampen…1にしよう

Min Kill Speed…基本的に数字は問わないが0のままだと不発するので10くらいの数値を入れておこう


画像6

最後に一番下の[Renderer]の設定。好みで分かれる部分も多いのであくまで一例として捉えて頂きたい。今回は当たり判定をSphereのMeshで取ることにする。

Render Alignment…カメラ位置によって当たり判定がずれたりする場合があるのでLocalにしよう

当たり判定自体の大きさはパーティクルシステムのScaleで調整しよう。


画像7

と、ここまで調整してこのような形となった(本記事用に当たり判定は実体化しています)。飴ちゃんみたいになったがパーティクルの設定はひとまずこれで進ませて頂く。


画像8

続いてパーティクルシステムの子にいるAudio Sourceの設定。[AudioClip]に再生したい音源をぶち込み設定していく。


Play On Awake…オンにしよう

Loop…オフにしよう

Volume…お好みでと言いたいところだが、とりあえずの設定を終えた後にVRChat上でAvatar音量100で鳴らしてみて不快にならない程度の音量にしよう

Spatial Blend…3Dサウンド(音源からの距離によって音量減衰が発生する)にしたいなら1に。2DサウンドだとVRChat上では自分がいるインスタンス全体に音源が再生されて迷惑極まりないので3Dサウンドにすることを強く推奨する

Volume Rolloff…Linear Rolloffにしよう。これによりMax Distanceを超える場所にいる人には音源が一切聞こえなくなる

Min Distance…音量最大の最低保証距離。お好みで

Max Distance…音量が完全に無くなる境界の距離。お好みで


実はVRChatでのアバターに仕込む3Dサウンドは制約限度がかかっている模様で、Max Distanceを100mにしても約30m~40mの距離ぐらいまで制限されてしまう。


画像9

さて忘れてならないのがVRC Spatial Audio Sourceのコンポーネントである。これが無いと3Dサウンドが再生されないのでAdd Componentをクリックし検索に「vrc」と入力するとこのコンポーネントを選択できる。

Enable Spatialization…このチェックボックスをはずそう。これによりVRC Spatial Audio Sourceの設定がほぼ無かったことになる。実はこのコンポーネント色々不安定な部分があり、とりあえずついてるだけでVRC上で3Dサウンドが鳴ってくれるのでそういう感じである


画像10

パーティクル&音源の設定を済ませたらScene上にCubeを置き、実際にコライダー衝突が起こるか再生モードでCubeをぶつけてテストしてみよう。


画像11

当たり判定が消え、パーティクルシステムが非アクティブ化すれば成功である。音が再生されないのは普通なので気にしないでおこう。実はこの時点でほぼ完成である。



◎アニメーションの作成◎

アニメーションの作成は構成がちょっと変わっただけでエラーを起こしまくるので、この辺りで一番親のGameObjectの位置を調整しアバターの手などの子要素に配置してアイテムを持たせるなりしよう。

画像12

調整が済んだらアップロード予定のアバターを複製しアニメーションファイルをD&Dして作成に移る…とはいえ作成するアニメーションは至極単純なもので、パーティクルシステムをひたすら表示しまくるアニメーションがあればこのシステムは完成する。LoopTimeのチェックを忘れないようにしよう。



画像13

このシステムを図解するとこうなる


1.当たり判定パーティクルはLifeTimeが長い&1個だけ存在するアクティブの状態

2.コライダー衝突するとパーティクルが消滅し[Disable]設定のためパーティクルシステムが非アクティブ化。子のAudioSourceも自動的に非アクティブ化

3.パーティクルシステムをひたすら表示しまくるアニメーションが作動している限り当たり判定パーティクルシステムがアクティブ化し、子のAudioSourceも自動的にアクティブ化。Play On Awakeによりこのタイミングで音が鳴る


コライダー衝突すると一瞬で非アクティブ化し一瞬で再アクティブ化するため衝突が起きるとほぼ同時に音が鳴るシステムである。


最後にアバターに持たせたアイテムに再生状態でCubeをぶつけて音が再生されたら成功である。ちなみにUnity上では音を拾う判定はMainCameraにあるのでアイテムに近づけておこう。



◎工夫◎

ここからはひと手間加えるならばの話。

EXメニュー等で音が鳴るアイテムを取り出すために非アクティブ→アクティブにしただけで音が1回勝手に鳴ってしまうのである。これはアイテムを取り出す時のアニメーションに音源をミュートにするキーを数秒挟むことで解決する。


1.取り出すアニメーション(Loop無し)…再生開始時にアイテム全体とパーティクルシステムをアクティブ化&AudioSourceを数秒ミュート後、ミュート解除

2.パーティクルシステムをひたすら表示しまくるアニメーション(Loop有り)


こういった具合で遷移すると良い。使うパラメーターはBoolの方が制御しやすいのでそちらをおススメする。


そしてサブエミッター(叩いた時に星とか出るやつ)に関しては書かれている記事も多いため今回は割愛させて頂きます。一つアドバイスするならサブエミッターのパーティクルシステムは非アクティブ化すると困るので当たり判定パーティクルシステムと同階層に置くと安定することかな。



◎余談◎

・このシステムの弱点…実はコライダーに衝突し続けている場合、継続的に音が鳴ってリズム天国になってしまうのである。これをどうにかする方法は今のところ思いつかない( ˘ω˘ )

・VRChatアバターのコライダー…実はアバターにもコライダーは持たせられる以外にデフォルトで備わっているコライダーが存在する。ViewPointである。しかしViewPointコライダーは叩かれた本人にしか音もサブエミッターも再生されないLocal仕様。



◎おわりに◎

まだまだ完璧とは言えないがこのシステムでハリセンとかピコピコハンマーとか持たせられるので、少しスパイスの効いたVRChatライフを送るならこのシステムを導入してフレンドと殴り合ったり叩き合ったりして遊んじゃおう!でも空気は読もうな!


著:ラムダ団大総統 ヴィランVtuber Vain


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