TKSPのUnity関連ブログ

Unityに関することで書きたいことを書く.

VRChatアバターから音楽を鳴らす[VRChatアバター改変のすすめ その5]

はじめに

こんにちは。
前回はConstraintについての大雑把な説明を行いました。
ここまで読んでくれた方は、かなりアバター改変の腕が上がっているのではないでしょうか?

さて、今回はVRCで効果音や音楽を鳴らす方法について説明していきます。

音楽を用意する

お手軽なのは魔王魂さんです。
よさげな曲をダウンロードしたら、UnityのProjectにドラッグ&ドロップしましょう。
mp3、wav、ogg形式に対応しています。m4aは対応していません。別のツールで変換してください。
f:id:ymtkyorosiku:20211012204433p:plain

音楽を鳴らす

今回はとても簡単です。UnityではAudioSource属性のついた物体で音を鳴らすことができます。
試しにその2で作成した右手のCubeにAudioSource属性を取り付けてみます。
f:id:ymtkyorosiku:20211012204905p:plain
再生したい音楽を指定しましょう。
Play On Awakeには必ずチェックを入れましょう。入っていないと再生されないです。
ループしたい場合はLoopにチェックをします。
Volumeで音量を調整します。

各パラメータについてはこちらの変数の項目を参照してください。
UnityEngine.AudioSource - Unity スクリプトリファレンス

これで、オーケストラ24がワールドにいるすべての人に同じ音量で響き渡るようになりました!
大迷惑!!

音の範囲を調整する

音の範囲を調整するには VRC Spatial Audio Source が必要になります。アタッチしましょう。
f:id:ymtkyorosiku:20211012205310p:plain

そのままだと聞こえる範囲が広すぎるので、Farを3、Nearを2にします。
Farは聞こえる距離(メートル)でNearは音量が下がらない範囲(メートルです)
Gainは音量の強さだと思うのですが、AudioSourceのVolumeとバランスをとって最適な音量になるまでいろいろ試してみてください。
これで、Cubeの中心に近づくほど音量が大きくなるようになりました!

完成

今回はとても簡単でしたね。
そのままアップロードで完成です。
その2で作成した、cube_onとcube_offを切り替えるとActiveが切り替わってAudioSourceが無効化されるため、Cubeが出現しているときに音楽が再生され、Cubeが出現していないときに音楽が停止します。

応用

応用1.見た目を変更する


こちらのスピーカーをインポートします。

f:id:ymtkyorosiku:20211012212053p:plain

Cubeと同じ階層に置きます。
f:id:ymtkyorosiku:20211012223648p:plain
Transformをコピー、ペーストします。
Transformと表示されている部分で右クリックするとコピーをするメニューが出てきます。

f:id:ymtkyorosiku:20211012212413p:plain
Transformのコピー
f:id:ymtkyorosiku:20211012212436p:plain
Transformの値上書き

Parent ConstraintとAudioSorceとVRC Spatial Audio Sourceを同じ設定で取り付けます。
新しく取り付ける場合は、すでについているコンポーネントのいずれかから右クリックしてメニューを出現させ、Paste Component As New です。

f:id:ymtkyorosiku:20211012212844p:plain
コピー
f:id:ymtkyorosiku:20211012212955p:plain
新規に追加して値をコピー

スピーカーのAnimatorはいらないので外しちゃいます。
f:id:ymtkyorosiku:20211012213153p:plain

Cubeを削除して、スピーカーの位置を調整します。
f:id:ymtkyorosiku:20211012213724p:plain
f:id:ymtkyorosiku:20211012213730p:plain

アニメーションを修正します。
アバターのAnimator属性のControllerにFXLayerを指定して録画ボタンでしたね。
cube_offとcube_onアニメーションを修正しましょう。

f:id:ymtkyorosiku:20211012214102p:plain

これで見た目をCubeからスピーカーに変えることができました。

応用2.設置ギミックから音楽を鳴らす

その4で作成した設置ギミックのCubeをスピーカーにします。
スピーカーについているParent Constraint以外のコンポーネントを全てCubeに上書きまたは追加します。
f:id:ymtkyorosiku:20211012214931p:plain
f:id:ymtkyorosiku:20211012215024p:plain
これで完成!早い...
Mesh Filterは形、Mesh Rendrerはコンピューターにこの材質で絵を描いて欲しいと命令する特性なので、実は応用1もこの方法なら早かったのです。

応用3.音楽を変更する

複数の音楽を配置する

Cubeの子に空のオブジェクト(Create Empty)を鳴らしたい音楽の数だけ配置し、それぞれにAudioSourceとVRC Spatial Audio Sourceを設定、名称変更、再生したい音楽を指定します。
f:id:ymtkyorosiku:20211012223924p:plain
f:id:ymtkyorosiku:20211012220324p:plain
CubeのVRC Spatial Audio SourceとAudioSourceは外します。
f:id:ymtkyorosiku:20211012224204p:plain
この時、先にVRC Spatial Audio Sourceから外さないとAudioSourceは外せません。

アニメーションの準備

FXLayerにLayerを追加、Weightは1、アニメーションを作成し、パラメータ追加、Motion Timeをonにして、作成したパラメータを指定します。
f:id:ymtkyorosiku:20211012220936p:plain
f:id:ymtkyorosiku:20211012221013p:plain
Motion Timeについては後述します。

アニメーションの作成

先ほど作成した音楽を鳴らす物体をまとめて選択して録画状態でキーを打ちます。
コピペで増やして、n+1分のキーを打ちます。(nは配置した音楽の数、画像の場合は3なので3+1 = 4)
以下の画像のように各フレームで有効にする物体が一つになるようにキーを打ちます。(最後のキーは全部無効化)

f:id:ymtkyorosiku:20211012221727p:plain
1frame
f:id:ymtkyorosiku:20211012221758p:plain
2frame
f:id:ymtkyorosiku:20211012221808p:plain
3frame
f:id:ymtkyorosiku:20211012221819p:plain
4frame
アップロードの準備

第3回で使用したRadial Puppetで0-1の範囲でSelectMusicを切り替えるようにします。
f:id:ymtkyorosiku:20211012222237p:plain
f:id:ymtkyorosiku:20211012222244p:plain

アップロード

アップロードして動作確認しましょう。
設置した後にRadial Puppetの値を変更することで音楽が変更されることが確認できるかと思います。

Motion Timeについて

f:id:ymtkyorosiku:20211012222847p:plain
アニメーションをframeで流れるように再生するのではなく、frameを割合で固定して再生することができます。
f:id:ymtkyorosiku:20211012222837p:plain
応用すれば服を即座に切り替えることもできますし、第3回で行った色の切り替えも、色を混ぜる表現の必要が無い場合は、こちらの方法だとアニメーションファイル一つで実現可能になります。

最後に

以上、VRChatアバターから音楽を鳴らす方法でした。