- 2021年2月7日
【Unity小技集 Vol.001】OnTriggerStay OnCollisionStay が期待通り機能しないときに確認すること
課題編 以前はこんなことなかったような気がするのです……
音は「AudioSourceコンポーネント」「AudioListenerコンポーネント」など音に関する専用のコンポーネント活用して実現します。
音のプログラムの事前準備
通常、音を鳴らすには、オーディオプレイヤーとスピーカー、さらに音源(mp3,wavファイルなど)が必要です。
一方Unityではオーディオプレイヤーの役割を担うのが「AudioSourceコンポーネント」、スピーカーの役割を担うのが「AudioListenerコンポーネント」、さらに音源が「AudioClip」と呼ばれるものです。
AudioListenerコンポーネント はデフォルトで MainCamera についています。今回スクリプトファイルを付与するオブジェクトに AudioSourceコンポーネント を追加します。
今回の変換表ではAudioClip型の変数をよく使うので、前提条件として下のように変数の宣言と取得を行ったうえで説明を進めます。
AudioSource source; //AudioSource を使うための変数
void Start()
{
source = GetComponent<AudioSource>(); //初期値を取得
}
※AudioSourceを事前に準備してください(冒頭の事前準備)
1,音源が1種類の場合
AudioSource コンポーネントの AudioClip に任意の音を指定します。
Play()メソッドで指定した音を鳴らします
source.Play(); //一度だけAusioClipの音を鳴らす
2,音源が複数ある場合
音源を配列で用意します。
public AudioClip[] clip;
配列:Clip に Inspector から事前に用意した音源をAssign
一度だけ音を鳴らす場合は PlayOneShotメソッド を使用します。
source.PlayOneShot(clip[0]); //0番目の音を1度音を鳴らす
source.PlayOneShot(clip[1]); //1番目の音を1度音を鳴らす
スクラッチではこのブロックがよく使われるのは、繰り返し処理の中で音楽をループさせるケースです。音を鳴らすには Playメソッドを使います。
※AudioSourceを事前に準備してください(冒頭の事前準備)
public AudioClip crip; //音源を宣言
void Start()
{
source.loop = true; //繰り返しを有効
source.clip = crip; //音源を指定
source.Play(); //音を鳴らす
}
※AudioSourceを事前に準備してください(冒頭の事前準備)
まずは上の「終わるまで○の音を鳴らす」を使って任意の音をPlayしておきます。
音を止めるには Stopメソッドを使用し、任意の場所で音楽を止めます。
source.Stop();
スクラッチブロックには「ピッチの効果」と「パンの効果」の項目があります。Unityには他にも様々な音に関する効果がありますが、ここではピッチとパンのご紹介を行います。
※AudioSourceを事前に準備してください(冒頭の事前準備)
ピッチの効果は、AudioSourceコンポーネントの Ptichプロパティが管理しています。Unityでは1.0がデフォルト値なので、変動幅に注意しましょう。
source.pitch += 0.01f;
※AudioSourceを事前に準備してください(冒頭の事前準備)
パンの効果は、AudioSourceコンポーネントの StereoPanプロパティが管理しており、0が中央値、+1.0で右側からのみ音が流れ、-1.0 で左側からのみ音が流れます。
source.panStereo += 0.1f; //右側にパン
source.panStereo -= 0.1f; //左側にパン
音の効果を指定の値ずつ変更するのと同様、音の効果を指定の値にするブロックです。
※AudioSourceを事前に準備してください(冒頭の事前準備)
ピッチの効果は、AudioSourceコンポーネントの Ptichプロパティが管理しています。
source.pitch = 1.0f; //ピッチの効果を1.0(初期値)にする
※AudioSourceを事前に準備してください(冒頭の事前準備)
パンの効果は、AudioSourceコンポーネントの StereoPanプロパティが管理しています。
source.panStereo = 0.0f; //パンの効果を0(初期値)にする
※AudioSourceを事前に準備してください(冒頭の事前準備)
Unityではピッチやパン以外にも、左の図の様に各種パラメータを調整することが出来ます。詳細は公式リファレンスをご参照ください
音の効果をなくすには、事前にこれらの初期状態を取得し、任意の場所でその変更したプロパティを初期値に戻します。
float[] sourceProperty = new float[6]; //プロパティの初期を入れる配列
void SetAudio()
{
sourceProperty[0] = source.priority; //優先度
sourceProperty[1] = source.volume; //ボリューム
sourceProperty[2] = source.pitch; //ピッチ
sourceProperty[3] = source.panStereo; //パン
sourceProperty[4] = source.spatialBlend; //3DEngineが与える影響度
sourceProperty[5] = source.reverbZoneMix; //出力信号の量
}
void ResetAudio()
{
source.priority = (int)sourceProperty[0]; //ここだけint型にキャスト
source.volume = sourceProperty[1];
source.pitch = sourceProperty[2];
source.panStereo = sourceProperty[3];
source.spatialBlend = sourceProperty[4];
source.reverbZoneMix = sourceProperty[5];
}
※AudioSourceを事前に準備してください(冒頭の事前準備)
音量は、AudioSourceコンポーネントの Volume プロパティが管理しています。最大値が1.0 になります。
source.volume -= 0.1f; //音量を0.1ずつ下げる
※AudioSourceを事前に準備してください(冒頭の事前準備)
音量は、AudioSourceコンポーネントの Volume プロパティが管理しています。100%は1.0 になります。
source.volume = 1.0f;
※AudioSourceを事前に準備してください(冒頭の事前準備)
音量は、AudioSourceコンポーネントの Volume プロパティが管理しています。
source.volume
使用例
もし音量が 80 より大きかったら
音量を 80% にする
if (source.volume > 0.8f) //もし音量が0.8より大きければ
{
source.volume = 0.8f; //音量を0.8にする
}
ファイブボックスでは、スクラッチはもう卒業、という方向けにUnityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。
それでは次の「イベント編」もご活用ください。