そういうのがいいブログ

アプリ個人開発 まるブログ

アプリ開発覚え書き

【Unity】サウンドの基本 AudioClip AudioSource AudioListener

環境

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コンポーネントを適当なオブジェクトに付けて
・オーディオクリップに音楽ファイルをアタッチ
・ゲーム開始時に再生にチェック
を行い実行することで再生できます。
image.png

スクリプトから再生

Playメソッド、PlayOneShotメソッドを使用するために
以下の前準備を行います。

前準備
・空のゲームオブジェクトを作成
・新規スクリプトを作成
・作成した空のオブジェクトに次の2つを割り当て
 AudioSourceコンポーネント
 作成した新規スクリプト
・AudioSourceコンポーネント設定
 「ゲーム開始時に再生」のチェックを外しておく

image.png

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]についての説明はこちら↓
marumaro7.hatenablog.com

次にインスペクター画面で
・AudioSourceを変数aにアタッチ
・再生したい音楽ファイル (AudioClip) 割り当て
  image.png

実行すると音が再生されます。

 

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をアタッチします。
image.png
実行することで音が再生されます。

 

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コンポーネントでこのように関数を割り当てることで使います。
image.png
再生している状態でボタンを押せば音が停止します。

 

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つのボタンに自作の関数をそれぞれ割り当てることで
一時停止と一時停止解除を行うことができます。



応用記事

marumaro7.hatenablog.com

marumaro7.hatenablog.com