特定の場所に入ったときにボリュームアップして、出たときにボリュームダウンさせる仕組みをつくりましょう。
OnTriggerで当たり判定をつくり、オーディオソースのボリュームを制御して作成します。
条件による音量の上げ下げは、ゲームの演出にも効果的な方法です。
関連記事:
ボリュームを徐々に小さくする
特定エリアに入った時は実行不可にする
Collider内にとどまればn秒間動けなくなる
音量アップのエリア作成
平面とCubeを作成し、Cubeの座標を変更します。
Cubeにリジッドボディを追加して、色をつけます。
ゲームビューではこのような配置になっています。
Cubeに、オーディオソースを追加します。
サウンドファイルをインポートし、オーディオクリップに入れます。
もう一つCubeを作成し、名前をVolumeAreaと座標を変更。
トリガーにするにチェックを入れます。
VolumeAreaはこのように配置されています。
VolumeAreaを透明にしましょう。
マテリアルを新規作成し、、名前をToumeiにします。
Rendering ModeをFadeに変更し、Aの値を0にします。
Toumeiを、VolumeAreaに付けます。
条件によるボリューム制御
VolumeChange.csを作成し、Cubeに追加します。
VolumeChange.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class VolumeChange : MonoBehaviour { AudioSource audioSource; public bool volumeUp; void Start() { audioSource = GetComponent<AudioSource>(); audioSource.volume = 0.3f; volumeUp = false; } void Update() { float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f; float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; transform.position = new Vector3 ( transform.position.x + dx,transform.position.y, transform.position.z + dz ); } private void OnTriggerStay(Collider other) { if (other.gameObject.name == "VolumeArea" ) { StartCoroutine("VolumeUp"); } } private void OnTriggerExit(Collider other) { if (other.gameObject.name == "VolumeArea" ) { StartCoroutine("VolumeDown"); } } IEnumerator VolumeUp() { if(!volumeUp) while(audioSource.volume < 1) { audioSource.volume +=0.01f; yield return new WaitForSeconds(0.1f); } volumeUp = true; } IEnumerator VolumeDown() { while(audioSource.volume > 0.1f) { audioSource.volume -=0.05f; yield return new WaitForSeconds(0.1f); } volumeUp = false; } } |
ゲームプレイして、Cubeを動かしてみましょう。
エリアに入れば音量が上がり、エリアから出れば音量が下がります。
関連記事:
ボリュームを徐々に小さくする
特定エリアに入った時は実行不可にする
Collider内にとどまればn秒間動けなくなる