本記事では、Unity初心者向けに効果音の再生手順を解説します。
基本コードは従来のInput Managerを使うマウス操作の例です。
Input System用のUpdate差し替え例も掲載します。
Unityでのコンパイル・実際の音声再生は今回確認していません。
【Unity】AudioSource.PlayOneShotで効果音を鳴らす方法【初心者向け】
AudioSourceへ音声を設定する方法と、PlayOneShotで短い効果音を重ねて再生する方法を説明します。
BGMのループ制御はこのコードの対象外です。
実際にコードを書いて音を鳴らす手順を確認しましょう。
Unityで使える音声ファイル形式
はじめに、Unityで主に使われる音声ファイル形式とそれぞれの特徴を確認します。
| 形式 | 特徴 | 向いている用途 |
|---|---|---|
| WAV / AIFF | PCMのWAV/AIFFは非圧縮の素材として使える。実行時の容量・負荷はインポート設定にも依存 | 効果音(SE) |
| MP3 / OGG | MP3/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:とりあえず音を鳴らしてみる(コードなし)
もっともシンプルな方法です。
スクリプトを書かずにコンポーネントの設定だけで音を再生できます。
- Hierarchyで右クリックし、「Create Empty」を選択して空のGameObjectを作成する
- 作成したGameObjectを選択し、Inspectorで「Add Component」から「Audio Source」を追加する
- Audio Sourceの「AudioClip」欄に、鳴らしたい音声ファイルをドラッグ&ドロップする
- Audio Sourceの「Play On Awake」にチェックが入っていることを確認する
- エディタ上部の再生ボタンを押す
以上の設定で、ゲーム開始と同時に設定した音声が再生されます。
方法2:クリックで効果音を鳴らす(コードあり)
左または右のマウスボタンを離したフレームで、別々の効果音を再生します。
Input.GetMouseButtonUpは従来のInput Manager用です。
Player SettingsのActive Input HandlingがInput Manager (Old)またはBothのPC用プロジェクトを前提にします。
Input Systemのみのプロジェクトでは、後述のUpdate差し替え例を使います。
手順
- Hierarchyで空のGameObjectを作成し、Audio Sourceコンポーネントを追加する
- 以下をPlaySound.csとして保存し、同名のPlaySoundを作成したGameObjectにアタッチする。Audio SourceのPlay On Awakeをオフ、Spatial Blendを0(2D)にする
- Inspectorでスクリプトの「Sound 01」「Sound 02」の各フィールドに、鳴らしたい音声ファイルを設定する
- ゲームを再生し、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での実行・実音の確認は行っていません。
