見出し画像

【VRChat】VRC Animator Play Audioを用いて、アバターに複数の効果音を実装して、メニューから再生する方法【VRC Animator Play Audio解説】

このnoteは、以前投稿したnoteの改定版となります。前回投稿した内容とは全く違うやり方となるので、ご了承ください。
また、ある程度animation、Animator Controller、EXmenu、parametor等を触ることになります。データのバックアップをしっかりとることを推奨します。
割とUnityに触り慣れていないと難しい面もあるので、基本的にはBooth等でサウンドギミックのツールを探して導入する方が圧倒的に楽です。あくまで自力で何とかしてみたい人向きの内容となっております。

※なお、この方法ができるのはPC専用アバターのみとなっております。Quest対応の条件下ではAudio Sourceの使用はできないので…。

以前書いた記事はこちら


VRC Animator Play Audioを使うメリット

・Audio Sourceの数を節約することができる!

前記事のやり方だと、音源ごとにAudio Sourceのコンポーネントを用意しなければならず、設定も個別に行う必要があり少し煩雑だった。
しかも、アバターのパフォーマンスランクの項目に「オーディオソースの数」という項目があり、あまり多くの音源を搭載するとそこに引っ掛かってパフォーマンスランクに影響を及ぼしてしまうといった問題もあった。

アバター自体の容量にも影響が出る可能性がある…。音源を複数搭載するなら軽量化のためにもAnimetor Play Audioを用いた方がよい。

・複数の音源をランダム再生したり、音量やピッチを変えたり等、いろいろな再生バリエーションを持たせることができる!

後半で詳しい説明をするが、VRC Animator Play Audioには複数のオプションがあり、リストの音源を順番に再生したり、ランダム再生したり、ピッチや音量に幅を持たせて再生したりなど、様々なオプションがある。
これによって、同じ音源でもいろいろなバリエーションを持たせて再生することができる。

参考

英語だが解説の動画がある。改変慣れしている人はこの動画だけでも十分に理解できる。

また、VRChat Creationにも公式な説明がある。

基本的にはこれらをふまえた解説をするため、この2つで理解ができるならばこれ以降の記事は読む必要ないです。

実装手順①:Audio Sourceを搭載した空のオブジェクトを作る。

まず、Hierarchy上に配置してあるアバターを右クリック、CreateEmptyを選択して空のゲームオブジェクトを作る。今回名前はわかりやすいように「SoundSource」とする。

次に、作成した「SoundSource」をクリック。inspectorから「Add Component」をクリックし、「Audio」→「Audio Source」を選択してAudio Sourceコンポーネントを適用する。
この際、AudioClipに音源を適用する必要はない。音源の管理は全てVRC Animator Play Audioで行うためである。ゆえにnoneのままで問題ない。

Audio Sourceの設定に関しては、解説している記事が多数あるのでここでは詳細に書くことはしない。
次に、もう1度「Add Component」をクリックして「VRC Special Audio Source」を追加する。ここの設定も他サイトで解説がたくさん出ているので、詳細は省くが、とりあえず前記事と同じくgain:0、far:10とした。

設定の一例。周囲に迷惑かからなければ好みの設定でいいと思う

実装手順②:Animator Controllerを編集する。

前記事と違い、ただ音を鳴らすだけならAnimationは必要ない。モーション無しでもVRC Animator Play Audioは機能する。
ただし、VRC Animator Play Audioはそれが付属されているステートに入ったときに実行される特性上、モーションと同時に実行することもできる。
(例えば、あるポーズをした際に音を鳴らしたい、何かアイテムを取り出したときに効果音を再生したい、など)
その場合は別途Animationを用意するとよい。

編集するAnimator ControllerはFXレイヤーに使っているものとなる。これを直接編集してゆく。
まず、Parameterの追加を行う。
Parametersタブに切り替えて、Bool型でパラメータを追加する。これがEXメニューで音源のON/OFFを切り替える際に必要となる。名前は何でもいいが、「soundEnable」とした。

次に、Layersタブに切り替えて、新しいレイヤーを作成する。名前はSoundPlayとした。
この時、Weightを1に上げておくのを忘れずに。

次はSound Playレイヤーの編集をしていく。
まず、Controller画面を右クリック→「Create state」→「Empty」で、2つステートを作る。名前はそれぞれわかりやすく「soundOff」、「soundOn」とする。
なお、同時に再生したいモーションがある場合は、Motionの欄に任意のアニメーションファイルを入れることもできる。先ほども述べたが、ただ音を鳴らすだけならmotion欄はNoneのままでよい。

次に「soundOff」を右クリック、「Make Transition」を選択し、「soundOn」に矢印をつなげる。今度は反対に「soundOn」を右クリックして「soundOff」にも矢印を返す。
次はそれぞれのTransition(矢印)の設定をする。

まずはHasExitTimeのチェックボックスを切る。
次に、Transition Duration(s)の値を0にする。この辺は基本的なBool型パラメーターの時の設定と変わらない。

そうしたら遷移条件の設定をする。Conditionsの+マークをクリックして遷移条件を追加する。左側のタブから「soundEnable」のパラメータを選択し、右側のタブは、「soundOff」から「soundOn」へ行く矢印は「true」、「soundOn」から「soundOff」へ行く矢印には「false」を設定する。

最終的な設定画面。

実装手順③:VRC Animator Play Audioの設定をする。

次はいよいよVRC Animator Play Audioの設定に入る。
「soundOn」のステートを選択し「Add Behavior」をクリック、「VRC Animator Play Audio」を追加する。

次に、Audio Sourceの入っているオブジェクトのパスを指定する。今回の場合はHierarchyから、「Sound Source」オブジェクトを「Drag & Drop~」と書いてある欄にドラッグ&ドロップする。

Modular Avatar等でオブジェクトの階層が変動する場合はちゃんと移動後のパスを指定すること。

次に、音源の追加をする。「Clips」の右の欄に追加したい音源の数を指定し、生成された欄にインポートした音源をドラッグ&ドロップする。今回はピアノの「ド」「レ」「ミ」の3つの音源を用意した。(素材提供:魔王魂様 https://maou.audio/category/se/se-inst/

追加する音源に関してだが、「Load in Background」にチェックが入っていないとアップロード時にエラーとなる。ついでに確認しておくとよい。

色々と設定項目があるが、それぞれの項目に関しては後々解説するとして、とりあえず進めて行く。

実装手順④:Expression Parameters、 Expression Menuの設定を行う。

ここまできたら、後はさほど難しいことはない。
まず、アバターに設定してあるVRC Expression Parametersを開いて、先ほど設定した「soundEnable」のパラメーターを登録する。TypeはBoolを選択する。

次に、Expression Menuを開く。新たにサブメニューを作ってもいいし、既存のメニューに追加してもいい。 今回は名前を「Play」、メニューから何回も続けて再生できるようにTypeを「Button」とした。最後に、Parameterの欄から先ほど追加したsoundEnableを選択する。

以上で、とりあえず「Expression MenuからPlayを選択すればド、レ、ミいずれかの音がランダムで鳴る」という動きが実装できるようになった。

以降はVRC Animator Play Audioについて各項目の説明を行う。上述した解説動画を見ながら読むとより分かりやすいかもしれない。

・VRC Animator Play Audio の各項目について

  • 「Playback Order」・・・その名の通り音源の再生方法を指定する。

・Random→Clip内の音源を重複ありでランダム再生する。デフォルトではこれ。
・Unique Random→同じく音源をランダムに再生する。ただし、同じClipの音源が2度続けて選択されない。
・Roundabout→Clipリストの上から順番に再生される。リストの一番下まで行ったら、また一番上に戻って再生される。
・Parameter→別途指定したInt型のパラメーターに従って音源を再生する。
値はリストの一番上が0、その下が1…と上から順番に割り振られる。
また、いくつかの項目にある右の欄では設定の適応方法について指定することができる。ただし、普通に使う分にはデフォルトの「Apply if stopped」のままでよいと思われる。

「AudioSource settings 」・・・音量やピッチの設定が変更できる。
・Random  Volume→音源の再生音量を指定できる(最大値1、最小値0)
・Random Pitch→音源のピッチ数を指定できる(最大値3、最小値-3)
・Loop →音源をループするかどうかを選択できる。

「Play Settings」・・・ステートに遷移したときの音源の挙動の設定。
・On Enter / On Exit→このVRC Animator Play Audioが入っているステートに遷移したときと、このステートからほかのステートに遷移する際に、音源を再生するか停止するかを選択できる。

・Play  On Enter Delay in Seconds →ステートに遷移してから、指定した秒数だけ、音源の再生を遅らせることができる。設定範囲は0 ~ 60(秒)。

Playback OrderのParameterについての追加解説(EXメニューから指定した音源を再生する方法)

例えばメニューから「ド」、「レ」、「ミ」の音をそれぞれ指定して出したいという場合には、設定をParameterで進めていく必要がある。と言っても大筋は上述したものと一緒で、いくつか追加で項目を設定してゆけば問題ない。

Audio Sourceの設定とAnimator Controllerの設定は上述したものと同じ。ステートを2つ作成してBool型のパラメーターを追加。遷移条件を矢印で決めるところまでは一緒。ここから追加で工程が入る。
先ほど設定したAnimator Controllerを開き、新しくInt型のParameterを追加する。名前は「soundList」とした。

そうしたら、「soundOn」のステートをクリック選択して、Add Behaviorを押下して VRC Animator Play Audioの設定を行う。

同じようにAudio Sourceの入ったゲームオブジェクトを一番上の欄にドラッグ&ドロップして、Source Pathを設定。
また同じようにClipを再生したい音源の数だけ設定し、インポートした音源をそこにドラッグアンドドロップ。

そして「Playback Order」を「Parameter」に設定する。そうすると、新たに「Parameter Name」の設定欄が出てきたと思う。そこの左側のタブをクリックし、先ほど設定したInt型パラメーターの「soundList」を選択する。

これでVRC Animator Play Audioの設定は終了。次はExpression Parameters、 Expression Menuを設定する。

同じようにBool型のパラメーターと、先ほど設定したInt型パラメーターを追加する。

そうしたらExpression Menuの設定を行う。
音源再生用のメニューをButtonで設定し、parameterには「soundEnable」を適用する。続けて、再生する音源のリストをToggleで設定し、parameterには「soundList」を適用する。再生する音源のリストのValueの数値は、0がVRC Animator Play AudioのClipリストの一番上の欄、その下の欄が1、その股下の欄が2…と上から順番に番号が割り振られているため、それぞれ対応する音源の数値に設定をする。

soundListのパラメーターの設定がうまく行ってないと、リストの一番上の音源しか再生されないらしい

これでExpression Menuのド~ミから音源を選択、Playで音源を再生、といった動きができるようになったはずだ。

動作チェック

以下の動画のようにメニューから音源を選択して再生できていれば成功。


パフォーマンスも確認。複数の音源を搭載していても、オーディオソースの数は1つ。



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