サウンドを再生する - イベント発生時のSE/効果音の再生

Unityでイベント発生時にSE音や効果音を再生するコードを紹介します。

概要

Unityで効果音やSEのサウンドを再生する場合は、SoundSourceオブジェクトを作成し、SoundSourceオブジェクトのPlayOneShot()メソッドを呼び出すことで再生できます。

プログラム例

事前準備

今回はボタンクリックにより効果音を再生する動作を実装します。はじめに、こちらの記事を参照してUIボタンの設置とボタンクリックイベントを実装します。

アセットのインポート

再生するサウンドファイルをインポートします。Unityの[アセット]メニューの[新しいアセットのインポート...]をクリックします。
サウンドを再生する - イベント発生時のSE/効果音の再生:画像1

[新しいアセットのインポート]のファイルを開くダイアログが表示されますので、準備したサウンドファイルを参照します。今回は下図のwave形式のファイルを準備しました。
サウンドを再生する - イベント発生時のSE/効果音の再生:画像2

インポートが完了するとウィンドウ下部の[Assets]ウィンドウにサウンドが追加されます。ウィンドウ右下のプレビューエリアでサウンドの波形やサウンドの再生もできます。
サウンドを再生する - イベント発生時のSE/効果音の再生:画像3

オーディオソースの作成

オーディオソースを作成します。今回はボタンクリックによりサウンドを再生しますので、ボタンのコントロールにオーディオソースを作成します。シーンウィンドウでUIボタンのコントロールをクリックして選択します。右側の[インスペクター]ウィンドウを最下部までスクロールして [コンポーネントを追加] ボタンをクリックします。
サウンドを再生する - イベント発生時のSE/効果音の再生:画像4

ドロップダウンメニューが表示されます。メニューの[Audio]の項目をクリックします。
サウンドを再生する - イベント発生時のSE/効果音の再生:画像5

オーディオに関するコンポーネントの一覧が表示されます。リストの中の[オーディオソース]の項目をクリックします。
サウンドを再生する - イベント発生時のSE/効果音の再生:画像6

オーディオソースが作成され、[インスペクター]ウィンドウに[オーディオスース]の項目が追加されます。
サウンドを再生する - イベント発生時のSE/効果音の再生:画像7

オーディオクリップの設定

作成したオーディオソースで再生するサウンド(オーディオクリップ)を設定します。[インスペクター]ウィンドウの[オーディオソース]セクションの[オーディオクリップ]の項目の右側の[〇]ボタンをクリックします。下図の[Select AudioClip]ダイアログが表示されます。ダイアログ内にオーディオクリップの一覧が表示されます。今回再生する[click]のオーディオをクリックして選択します。
サウンドを再生する - イベント発生時のSE/効果音の再生:画像8

[オーディオクリップ]の欄が "None"から "click" に変化しオーディオクリップが設定されたことが確認できます。~ サウンドを再生する - イベント発生時のSE/効果音の再生:画像9

初期化時の自動再生の無効化

デフォルトの動作ではオーディオソース(オブジェクト)が作成された際にオーディオが再生される設定になっています。この状態のままではプロジェクトを実行して画面が表示されたタイミングでオーディオが再生されてしまいますので、無効化する必要があります。[オーディオソース]のセクションの[Awake時に再生]のチェックボックスをクリックしてチェックを外します。
サウンドを再生する - イベント発生時のSE/効果音の再生:画像10
サウンドを再生する - イベント発生時のSE/効果音の再生:画像11

コードの記述

ボタンがクリックされた際にオーディオソースを再生する動作を実装します。ボタンのスクリプトを編集します。[Assset]ウィンドウの "ClickScript"をダブルクリックします。Visual Studioが起動しスクリプトの編集画面が表示されます。
サウンドを再生する - イベント発生時のSE/効果音の再生:画像12

下記のコードを記述します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class ClickScript : MonoBehaviour
{
  private AudioSource button_AudioSource;

  // Use this for initialization
  void Start()
  {
    button_AudioSource = GetComponent<AudioSource>();
  }

  // Update is called once per frame
  void Update()
  {

  }

  public void ButtonClick()
  {
    button_AudioSource.PlayOneShot(button_AudioSource.clip);
  }
}

解説

ボタンが生成されたタイミングで、Start()メソッドが呼び出されます。ここでGetComponent()メソッドを呼び出し、オーディオソースを取得します。ボタンがクリックされたタイミングでButtonClick()メソッドが呼び出されます。ButtonClick()メソッド内で、オーディオソースのPlayOneShot()メソッドを呼び出しオーディオソースを再生します。PlayOneShot()メソッドの第一引数には再生するオーディオクリップを与えます。今回はオーディオソースに設定されたオーディオクリップを再生するため、オーディオソースオブジェクトのclipオブジェクトを与えています。

実行結果

再生ボタンをクリックしてプロジェクトを実行します。下図の画面が表示されるのでボタンをクリックします。ボタンをクリックするとサウンドが再生されることが確認できます。
サウンドを再生する - イベント発生時のSE/効果音の再生:画像13

指定したBGMを再生できました。
AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2018-08-19
Copyright © 1995–2025 iPentec all rights reserverd.