環境
Unity 2019.3.7f1
#はじめに
サウンドを再生したことはあるけど、
再生方法がいくつかあって、いまいち手順がまとまっていないためメモ
サウンドの基本
音を鳴らすには次の3つが必要です。
・AudioClip
CDみたいなもの 自分でファイルを用意する。
再生できる形式はaif、wav、mp3、oggです。
・AudioSource
CDプレイヤーみたいなもの このコンポーネントをオブジェクトに付ける必要有り。。
・AudioListener
スピーカーみたいなもの MainCameraにこのコンポーネントが勝手についている。
一つのシーンに2つ以上つけると警告がでる。
音の再生方法
音の再生方法は大きく分けて次の2種類
・AudioSourceにAudioClipを紐づけして再生
・スクリプトから再生
-Playメソッド
BGM再生(重ねて再生×)
-PlayOneShotメソッド
SE再生(重ねて再生〇)
-UnPauseメソッド
一時停止を解除
音の停止方法
スクリプトから停止
-Stopメソッド
CDプレイヤーでいう■ボタン 再度再生すると最初からの再生になる。
-Pauseメソッド
一時停止する
具体例
音の再生方法
・AudioSourceにAudioClipを紐づけして再生
AudioSourceコンポーネントを適当なオブジェクトに付けて
・オーディオクリップに音楽ファイルをアタッチ
・ゲーム開始時に再生にチェック
を行い実行することで再生できます。
・スクリプトから再生
Playメソッド、PlayOneShotメソッドを使用するために
以下の前準備を行います。
前準備
・空のゲームオブジェクトを作成
・新規スクリプトを作成
・作成した空のオブジェクトに次の2つを割り当て
AudioSourceコンポーネント
作成した新規スクリプト
・AudioSourceコンポーネント設定
「ゲーム開始時に再生」のチェックを外しておく
Playメソッド
主な用途はBGM再生です。
複数の音を重ねて再生できません。
では、Playメソッドを使って音を再生してみます。
まず、スクリプトをこのように書きます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test4 : MonoBehaviour
{
[SerializeField] private AudioSource a;//AudioSource型の変数aを宣言
void Start()
{
a.Play();//AudioSource型が入っている変数aを再生
}
}
[SerializeField]についての説明はこちら↓
https://qiita.com/Maru60014236/items/f550b07d49e199be771b
次にインスペクター画面で
・AudioSourceを変数aにアタッチ
・再生したい音楽ファイル (AudioClip) 割り当て
実行すると音が再生されます。
PlayOneShotメソッド
こちらは複数の音を重ねて再生できますが、ちょっと手間が増えます。
スクリプトはこちらにします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test4 : MonoBehaviour
{
[SerializeField] private AudioSource a;//AudioSource型の変数aを宣言
[SerializeField] private AudioClip b;//AudioClip型の変数bを宣言
void Start()
{
a.PlayOneShot(b);//AudioClip型の変数bを引数として、AudioSource型が入っている変数aを再生
}
}
変数aにAudioSourceをアタッチ
変数bに再生したいAudioClipをアタッチします。
実行することで音が再生されます。
UnPauseメソッド
一時停止を解除する
Pauseメソッドの具体例の項目で一緒に説明します。
音の停止方法
スクリプトから停止
音の停止、一時停止はPlayメソッドや「ゲーム開始時に再生」にて音が再生されている状態で使います。
Stopメソッド
ボタンに自作の関数を割り当てて使うコードです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test4 : MonoBehaviour
{
[SerializeField] private AudioSource a;//AudioSource型の変数aを宣言 再生するAudioSourceをアタッチ必要
void Start()
{
}
//ボタンに割り当てる自作の関数
public void PushButton()
{
a.Stop();//AudioSource型が入っている変数aを停止
}
}
新規でボタンを作成し、Buttonコンポーネントでこのように関数を割り当てることで使います。
再生している状態でボタンを押せば音が停止します。
Pauseメソッド
PauseメソッドとUnPauseメソッドのボタンを作り
一時停止・一時停止解除ができるようにします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test4 : MonoBehaviour
{
[SerializeField] private AudioSource a;//AudioSource型の変数aを宣言 再生するAudioSourceをアタッチ必要
void Start()
{
}
//ボタン1つ目に割り当てる自作の関数
public void PushButtonPause()
{
a.Pause();//AudioSource型が入っている変数aを一時停止
}
//ボタン2つ目に割り当てる自作の関数
public void PushButtonUnPause()
{
a.UnPause();//AudioSource型が入っている変数aを一時停止解除
}
}
2つのボタンに自作の関数をそれぞれ割り当てることで
一時停止と一時停止解除を行うことができます。
おわりに
応用として2記事貼っておきます。