らくとあいすの備忘録

twitter : lactoice251

雑記20210617

あれだけハードルを下げておいて1か月以上空くという本末転倒感ですが...Audio Source回りで謎の挙動があったのでまとめておきます.

やりたいこと

2Dと3DのAudioを連続的に切り替える. 使い所は色々あって,例えば音の発生源の近くでは音の定位感が強いけど,離れれば反射でほぼ等方的に聴こえるとか.後は単純に演出として,「何か」が環境に拡散した感じを出したいとか.

問題点

Unity の 3D Audio Source にはSpatial Blendのプロパティがあって 2D/3D のスライダーになってます.Unity上ではただこのスライダーをC#等々で目的に応じて動かしてあげれば素直に動いてくれました.

しかし,Unity上で素直に動いているこれをVRChatに持っていくと妙な挙動になりました.

  • 距離減衰は2Dになると消えてどこまでも聴こえるようになる
  • 3Dによる効果はそのまま残る.モノラルでかつ定位感のある音が聴こえる.

どうやらVRChat上に運んだ時に何か変な処理が入るようです.

原因

VRChat上に運んでおかしくなるということは,VRC Spatial Audio Sourceに関連する事項である感じがします. 上の問題が起きたとき,VRChat Spatial Audio Sourceコンポーネントはつけていませんでした. それで,VRC Spatial Audio Sourceには,「Enable Spatialization」というチェックボックスがあります.

これは,名前の通りSpatialization (3D効果) を有効にするかどうかです.これがチェックボックスなので2Dから3Dに連続変化させるような場合にVRC Spatial Audio Sourceは付けたらダメなのではと思っていたのですが,これが結果的には誤りでした.

解決

2Dと3DのAudioを連続に切り替えたいときは,

  1. VRC Spatial Audio Sourceを付ける
  2. VRC Spatial Audio SourceのプロパティでEnable SpatializationをDisableにする
  3. Audio SourceのプロパティでSpatial Blend を動かす

これで動作しました.Enable SpatializationをDisableしても3Dにすると,Unity Audio Source標準の3D Audioにはなるようで...(なんだそれ). こうしないと,上手く切り替わってくれませんでした.

さいごに

2Dと3DのAudioを連続に切り替えるお話でした.使う人いるのかな...いないかもしれない.... もし使う場合は,検証漏れとか全然ありそうなので上手くいったりいかなかったりしたら教えてください.

それではまた,何か書くことが出来たら書きます.