現在、Unityでシューティングゲームを作っています。
敵が弾を撃つ際、
C#
1public AudioClip shotSound; 2略 3AudioSource.PlayClipAtPoint(shotSound, Camera.main.transform.position);
このようにして効果音を再生していたのですが、制作を進めていくうちに、敵が大量に同時に弾を発射した際に音が割れてしまう問題が発生しました。
調べると、AudioMixerというものを使うと音割れに対処できることが分かり試しました。
しかし更に調べると、PlayClipAtPointコマンドはAudioMixerに対応していないことが分かりました。
なんとかできないか調べてみると、
AudioMixerに対応したPlayClipAtPoint風スクリプト
というものを公開しているサイト様に辿り着きました。しかし、そのスクリプトの使い方が分かりません。
前提・実現したいこと
PlayClipAtPointで再生している効果音が、同時に大量に発生させた際に音割れしてしまう。
解決策になりそうな方法を見つけたが、どのようにすればこのスクリプトをPlayClipAtPointの代わりのように使えるのか分からないため、教えてほしい。
該当のソースコード
弾を撃つスクリプトの末尾に上記のスクリプトをまるまるコピー&ペーストし、
c#
1private void PlayAt3D(AudioClip audio,GameObject Model,float ClipVolume) 2{ 3// 「GameObject名 & "-Audio"」 という名前のゲームオブジェクトを作成 4GameObject Model_tmp = new GameObject(Model.name + "-Audio"); 5 6//GameObjectにAudioSourceをアタッチ 7AudioSource audio_tmp = new AudioSource(); 8audio_tmp = Model_tmp.AddComponent<AudioSource>(); 9 10//オーディオソースの設定 11audio_tmp.clip = audio; 12audio_tmp.transform.position = Model.transform.position; 13audio_tmp.spatialBlend = 1;//3D音響にするプロパティ(1だと3D、0だと2D) 14audio_tmp.loop = false;//ループオフ 15audio_tmp.volume = ClipVolume; 16audio_tmp.outputAudioMixerGroup = (指定したいオーディオミキサーのアウトプット); 17 18//再生 19audio_tmp.Play(); 20//クリップ長+0.1秒でオブジェクトを破棄 21Destroy(Model_tmp, audio.length + 0.1f);} 22}
さらに
AudioSource.PlayClipAtPoint(shotSound, Camera.main.transform.position);
の部分を
PlayAt3D();
と書き換えてみたところ、2つのエラーが発生しました。
発生している問題・エラーメッセージ
1つ目は
PlayAt3D(); 必要な仮パラメーター`audio`に対応する特定の引数が存在しません。
というエラーなのですが、いまいちどうしてやればいいのか見当がつきません。
2つ目は、
audio_tmp.outputAudioMixerGroup = (指定したいオーディオミキサーのアウトプット); 現在のコンテキストに`指定したいオーディオミキサーのアウトプット`という名前は存在しません。
というエラーです。ここがおかしいのは分かるのですが、
参考サイト様で(指定したいオーディオミキサーのアウトプット)となっているところに何を入れればいいのかまるで分かりません。
アウトプットさせたいGroupsのことかなと思い"Master"と入れるなどしてみましたが、String型はダメと言われ弾かれました。
「オーディオミキサーのアウトプット」とはどのようにして指定してやればいいものなのでしょうか?
どうか解決策をご教授お願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/14 04:04
2020/07/14 04:09 編集
2020/07/14 04:15
2020/07/14 04:16