Amazon11/12まで!スマイルSale開催中!セール会場へ

Unity│AudioSource.PlayOneShotで効果音を鳴らす方法

本記事では、Unity初心者向けに効果音の再生手順を解説します。

基本コードは従来のInput Managerを使うマウス操作の例です。

Input System用のUpdate差し替え例も掲載します。

Unityでのコンパイル・実際の音声再生は今回確認していません。

目次

【Unity】AudioSource.PlayOneShotで効果音を鳴らす方法【初心者向け】

AudioSourceへ音声を設定する方法と、PlayOneShotで短い効果音を重ねて再生する方法を説明します。

BGMのループ制御はこのコードの対象外です。

実際にコードを書いて音を鳴らす手順を確認しましょう。

Unityで使える音声ファイル形式

はじめに、Unityで主に使われる音声ファイル形式とそれぞれの特徴を確認します。

形式特徴向いている用途
WAV / AIFFPCMのWAV/AIFFは非圧縮の素材として使える。実行時の容量・負荷はインポート設定にも依存効果音(SE)
MP3 / OGGMP3/Ogg Vorbisは非可逆圧縮の素材。Unityへの取り込み後の圧縮形式とLoad Typeも確認するBGM

素材の拡張子だけでは、実行時のメモリー使用量やCPU負荷は決まりません。

Unityは素材をターゲット向けに再圧縮するため、AudioClipのCompression FormatとLoad Typeを確認します。

短い効果音と長いBGMで、音質・常駐メモリー・再生時の展開負荷を比較してください。

音を鳴らす仕組みを理解しよう

Unityで音声を再生するには、まず基本となる3つの要素の役割を把握しておく必要があります。

要素役割
AudioClip音声データのアセット(GameObjectへ追加するComponentではない)
AudioSource音を再生するスピーカー
AudioListener音を聞くマイクや耳の役割。初期状態のMain Cameraに設定されており、有効なAudioListenerを1つだけにする

方法1:とりあえず音を鳴らしてみる(コードなし)

もっともシンプルな方法です。

スクリプトを書かずにコンポーネントの設定だけで音を再生できます。

  1. Hierarchyで右クリックし、「Create Empty」を選択して空のGameObjectを作成する
  2. 作成したGameObjectを選択し、Inspectorで「Add Component」から「Audio Source」を追加する
  3. Audio Sourceの「AudioClip」欄に、鳴らしたい音声ファイルをドラッグ&ドロップする
  4. Audio Sourceの「Play On Awake」にチェックが入っていることを確認する
  5. エディタ上部の再生ボタンを押す

以上の設定で、ゲーム開始と同時に設定した音声が再生されます。

方法2:クリックで効果音を鳴らす(コードあり)

左または右のマウスボタンを離したフレームで、別々の効果音を再生します。

Input.GetMouseButtonUpは従来のInput Manager用です。

Player SettingsのActive Input HandlingがInput Manager (Old)またはBothのPC用プロジェクトを前提にします。

Input Systemのみのプロジェクトでは、後述のUpdate差し替え例を使います。

手順

  1. Hierarchyで空のGameObjectを作成し、Audio Sourceコンポーネントを追加する
  2. 以下をPlaySound.csとして保存し、同名のPlaySoundを作成したGameObjectにアタッチする。Audio SourceのPlay On Awakeをオフ、Spatial Blendを0(2D)にする
  3. Inspectorでスクリプトの「Sound 01」「Sound 02」の各フィールドに、鳴らしたい音声ファイルを設定する
  4. ゲームを再生し、Gameビューにフォーカスを置いて左右のボタンを離し、それぞれの音とConsoleを確認する

スクリプト

C#の例:

using UnityEngine;

[RequireComponent(typeof(AudioSource))]
public class PlaySound : MonoBehaviour
{
    public AudioClip sound01;
    public AudioClip sound02;
    private AudioSource audioSource;

    void Awake()
    {
        audioSource = GetComponent<AudioSource>();
        if (sound01 == null || sound02 == null)
            Debug.LogWarning("Sound 01 / Sound 02にAudioClipを設定してください。", this);
    }

    void Update()
    {
        if (audioSource == null || !audioSource.isActiveAndEnabled) return;
        if (Input.GetMouseButtonUp(0) && sound01 != null)
            audioSource.PlayOneShot(sound01);
        if (Input.GetMouseButtonUp(1) && sound02 != null)
            audioSource.PlayOneShot(sound02);
    }
}

Input Systemのみの環境ではUpdateを差し替える

Package Managerで使用中のUnity版に対応するInput Systemをインストールし、Project Settings → Player → Other Settings → Active Input HandlingをInput System Package (New)にします。

変更時はEditorの再起動が必要です。

Project Settings → Input System PackageのUpdate Modeは、この例ではProcess Events In Dynamic Updateを前提にします。

設定は公式の導入手順と更新モードの説明を参照してください。

上のPlaySoundクラスのUpdateメソッドだけを次へ置き換えます。

AudioClipフィールドとAwakeはそのまま残し、Updateを2つ定義しないでください。

asmdefを使う場合は、そのAssemblyからUnity.InputSystemを参照できる設定にします。

Input Systemが入っていない環境では、この差し替えコードはコンパイルできません。

void Update()
{
    if (audioSource == null || !audioSource.isActiveAndEnabled) return;
    var mouse = UnityEngine.InputSystem.Mouse.current;
    if (mouse == null) return;
    if (mouse.leftButton.wasReleasedThisFrame && sound01 != null)
        audioSource.PlayOneShot(sound01);
    if (mouse.rightButton.wasReleasedThisFrame && sound02 != null)
        audioSource.PlayOneShot(sound02);
}

Mouse.currentがnullなら処理をせず、wasReleasedThisFrameでボタンを離したフレームを判定します。

Play ModeでGameビューにフォーカスを置き、左右それぞれの効果音を確認してください。

この差し替え例もUnityでのコンパイル・実音は未確認です。

PlayOneShotとは?

AudioSource.PlayOneShot()は、効果音などのワンショット再生に適したAudioSourceのメソッドです。

特徴

  • 音声を1回だけ再生する
  • 同じAudioSource上で再生中の音を途切れさせず、音を重ねて再生できる
  • 第2引数volumeScaleをAudioSource.volumeに掛けて再生音量を調整する

C#の例:

// AudioSource.volumeに0.7を掛けて再生する例
audioSource.PlayOneShot(sound01, 0.7f);

注意点として、短時間に大量の音をPlayOneShotで同時に鳴らすと処理負荷が増加します。

連射時の効果音などは同時再生数や再生間隔に注意しましょう。

よくあるエラーと対処法

症状原因と対処
音が鳴らないAudioListenerがシーン内に存在するか確認する。カメラを削除していると消えている場合がある
AudioSourceの参照がない同じGameObjectのAudioSourceとスクリプトを確認する。Consoleの例外文を読み、未設定AudioClipとも区別する
音が小さい・聞こえないAudioSourceのMute/Volume、GameビューのMute Audio、OS出力先とMixerを確認する。3D設定の場合はListenerとの距離も確認する

Unityに関するほかの記事は、以下のリンクからご覧いただけます。

元記事のコードは、GitHubのMOTOKI-LLC/cg-method-codeにもあります。

本文の修正版との同期は未確認です。

Unityの基礎と学習の記事は、ほかにもあります。

まとめ

  • 音声素材の形式と、Unityでの圧縮形式・Load Typeを分けて確認する
  • 音を鳴らすにはAudioSourceコンポーネントが必要となる
  • PlayOneShot()を使用すると、同一AudioSource上で効果音を重ねて再生できる

仕様の参照先はPlayOneShot、GetMouseButtonUp、AudioClipLoadTypeです。

小さい音量から試し、連続再生時の音割れと負荷を確認してください。

スポンサーリンク

よくある質問:UnityのAudioSource.PlayOneShotで効果音を鳴らす

Unityで効果音を鳴らすには、何が必要ですか?

音声データのAudioClip、再生役のAudioSource、音を聞く役のAudioListenerの3つです。

AudioListenerは初期状態のMain Cameraに設定されており、有効なAudioListenerを1つだけにします。

効果音とBGMでは、どの音声形式を選べばよいですか?

PCMのWAV/AIFFは非圧縮の素材、MP3/Ogg Vorbisは非可逆圧縮の素材として扱います。

実行時の容量や再生負荷はUnityのCompression FormatとLoad Typeにも依存するため、短い効果音と長いBGMで音質・メモリー・CPU負荷を比較します。

コードを書かずに音を鳴らす方法はありますか?

あります。

空のGameObjectを作成してAudio Sourceコンポーネントを追加し、AudioClip欄に音声ファイルをドラッグ&ドロップします。

Play On Awakeにチェックが入っていることを確認して再生すると、ゲーム開始と同時に音が鳴ります。

PlayOneShotとは何ですか?

AudioSourceのメソッドで、効果音などのワンショット再生に向いています。

音声を1回だけ再生し、同じAudioSource上で再生中の音を途切れさせずに、音を重ねて再生できます。

第2引数volumeScaleはAudioSource.volumeに掛ける倍率です。

0.7fは最大音量の70%を直接指定する値ではありません。

短時間に効果音を何度も鳴らしても大丈夫ですか?

短時間に大量の音をPlayOneShotで同時に鳴らすと、処理負荷が増加します。

連射時の効果音などは、同時再生数や再生間隔に注意してください。

音が鳴らないときは、何を確認すればよいですか?

まず、AudioListenerがシーン内に存在するか確認します。

カメラを削除していると消えている場合があります。

AudioSource参照のエラーでは同じGameObjectのComponentを、未設定の警告ではSound 01とSound 02のAudioClipを確認します。

音が小さい、または聞こえないときはどうしますか?

AudioSourceのMute/Volume、GameビューのMute Audio、OS出力先、Mixerを確認します。

Spatial Blendが3D寄りの場合はListenerとの距離も確認します。

記事のスクリプトは、そのままどんな環境でも動きますか?

記事のサンプルは、マウスの左クリックと右クリックで別の効果音を鳴らす例で、Input.GetMouseButtonUpを使っています。

Input Manager (Old)またはBothを有効にしたPC用の例です。

Input Systemのみの場合は、本文のUpdate差し替え例と導入・更新モードの設定を使います。

今回、Unityでの実行・実音の確認は行っていません。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

Unityのおすすめ書籍

開発PCの選び方

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

須澤 元貴のアバター 須澤 元貴 代表社員

MOTOKI合同会社 代表社員。
アニメ・映像業界とゲーム業界で、2D・UI・3D・アニメーション制作、映像編集、ツール制作に携わってきました。
現在はWordPressを中心にWebサイトの制作とカスタマイズを手がけています。
著書に『Unity デザイナーズ・バイブル』『Unityゲーム プログラミング・バイブル 2nd Generation』(ボーンデジタル)。
岡山県出身、埼玉県在住。

目次