UnityUnityメモ

初心者必見!Unityでのオーディオソース設定と音の切り替え方法

Unity

はじめに

Unityでゲームを作るとき、**「音」**はとても大切な要素ですよね!
ボタンを押したときに「効果音」が鳴ると、プレイヤーに直感的なフィードバックを与えられます。例えば、攻撃するときの「ドンッ!」やアイテムを拾うときの「キラキラ」という音があると、ゲームの楽しさがぐっとアップします。

でも、「どうやって音を鳴らすの?」と思う方も多いのではないでしょうか?
そこで今回は、**Unity初心者でも簡単にできる「音を鳴らす仕組みの作り方」**を紹介します!

この手順では次のことができるようになります:

  • ボタン操作で効果音を鳴らす
  • 複数の音を切り替えて鳴らす

難しい知識は不要です!この記事を読めば、誰でも効果音を簡単に実装できますので、一緒にやってみましょう!Unityに触ったことがないという方はコチラの記事から見てみてください!

1.準備編

では早速、Unityで音を鳴らす準備を進めていきましょう!とても簡単なので、順番にやっていけば大丈夫です。


1. Unityプロジェクトの作成

まずは、Unity Hubから新しいプロジェクトを作りましょう。

  1. Unity Hubを開き、「New Project」をクリックします。
  2. テンプレートは「3D」または「2D」を選びます(どちらでもOKです)。
  3. プロジェクト名を入力(例:「SoundTest」)し、「Create Project」をクリック!

2. 効果音ファイルの準備

次に、プロジェクトで使う効果音ファイルを用意します。

  • 必要な効果音ファイルをダウンロード
    例えば、無料効果音素材サイトから「ボタン音」や「効果音」をダウンロードします。
    (ファイル形式はWAVMP3がおすすめです)
  • ダウンロードした効果音をUnityにインポート
    1. プロジェクトウィンドウで右クリック → 「Import New Asset」を選択。
    2. 用意した効果音ファイルを選択してインポートします。

これで準備完了です!
次は、実際にUnityで音を鳴らすための「オブジェクト作成」に進みましょう! 😊



3. オブジェクトの作成

ここでは、Unityで音を管理するための**「空のオブジェクト」**を作成し、音を鳴らす準備をします。とても簡単な手順なので、一緒に進めてみましょう!


1. 空のオブジェクトを作成

まず、効果音を管理するための空のオブジェクトを作ります。

  1. ヒエラルキーウィンドウで右クリック → 「Create Empty」を選択。
  2. 作成されたオブジェクトの名前を「SoundManager」に変更します。
  • ポイント
    「空のオブジェクト」は、見た目には何も表示されませんが、音や管理用のスクリプトをまとめるために使います。

2. AudioSourceの追加

音を鳴らすには、「AudioSource」というコンポーネントが必要です。このコンポーネントを追加します。

  1. 作成した「SoundManager」を選択。
  2. インスペクターウィンドウで「Add Component」ボタンをクリック。
  3. 検索バーに「AudioSource」と入力し、選択して追加。

これで、「SoundManager」オブジェクトが音を鳴らせるようになります。


3. AudioClipの設定

次に、追加したAudioSourceに効果音を設定します。

  1. 用意した効果音ファイル(AudioClip)を「プロジェクトウィンドウ」から「SoundManager」のAudioSourceにドラッグ&ドロップします。
  2. AudioSourceの「Play On Awake」のチェックを外します。
    (ゲーム開始時に音が自動再生されるのを防ぐため)

次は、このオブジェクトにスクリプトを追加して、キー操作で音を鳴らす仕組みを作ります。さっそく次のステップに進みましょう! 😊



4. スクリプトの作成と適用

ここでは、Unityで効果音を鳴らすためのスクリプトを作成して適用します。プログラミング初心者でも簡単にできるので安心してください!


1. スクリプトの作成

まず、効果音を管理するスクリプトを作成します。

  1. プロジェクトウィンドウで右クリック → 「Create」 → 「C# Script」を選択。
  2. スクリプトの名前を「SoundManager」に変更します。

これでスクリプトが作成されました!


2. スクリプトの編集

次に、スクリプトを編集して、Aキーを押すと音が鳴るようにします。

  1. 作成した「SoundManager」スクリプトをダブルクリックして開きます。
  2. 以下のコードを入力またはコピー&ペーストします。
using UnityEngine;

public class SoundManager : MonoBehaviour
{
    [SerializeField] private AudioSource audioSource;

    private void Update()
    {
        // Aキーを押したときに音を再生
        if (Input.GetKeyDown(KeyCode.A))
        {
            audioSource.Play();
        }
    }
}
  • ポイント解説:
    • AudioSource は音を再生するためのコンポーネント。
    • Input.GetKeyDown を使うことで、特定のキー(この場合はAキー)を押したときに音を再生できます。
  1. スクリプトを保存します(Ctrl + S または Command + S)。

3. スクリプトの適用

次に、作成したスクリプトをオブジェクトにアタッチします。

  1. ヒエラルキーウィンドウで「SoundManager」オブジェクトを選択。
  2. 「SoundManager」スクリプトをドラッグ&ドロップして、オブジェクトにアタッチします。

4. AudioSourceをスクリプトに設定

最後に、スクリプトとAudioSourceを連携させます。

  1. SoundManagerオブジェクトを選択。
  2. インスペクターウィンドウで、SoundManagerスクリプトの「AudioSource」フィールドに、「SoundManager」のAudioSourceをドラッグ&ドロップします。

次は、Unityエディターで動作確認をしてみましょう。再生してAキーを押すと、設定した効果音が鳴るはずです! 😊



5. スクリプト解説と編集

作成したスクリプトを少し深掘りして、どんな仕組みで音が鳴るのか解説します。また、応用的な機能を追加して、もっと便利なスクリプトにしてみましょう!


基本スクリプトの解説

以下が先ほど作成したスクリプトです:

using UnityEngine;

public class SoundManager : MonoBehaviour
{
    [SerializeField] private AudioSource audioSource;

    private void Update()
    {
        // Aキーを押したときに音を再生
        if (Input.GetKeyDown(KeyCode.A))
        {
            audioSource.Play();
        }
    }
}
  • [SerializeField]
    • Unityエディターで audioSource を設定できるようにするための属性。
    • スクリプトとエディターをつなぐ重要な役割を果たします。
  • AudioSource
    • Unityで音を再生するための基本コンポーネント。
    • 音の再生、停止、ループなどを簡単に管理できます。
  • Input.GetKeyDown
    • 特定のキーが押された瞬間だけ処理を実行するメソッド。
    • 例:KeyCode.A はキーボードのAキーに対応。

スクリプトを編集して複数の音を再生

次に、複数の効果音をボタンごとに再生できるようにスクリプトを編集してみましょう!

以下のコードを使用します:

using System.Collections.Generic;
using UnityEngine;

public class SoundManager : MonoBehaviour
{
    [SerializeField] private List<AudioSource> audioSourceList;
    [SerializeField] private List<AudioClip> audioClipList;

    private void Update()
    {
        // Aキーで最初の効果音を再生
        if (Input.GetKeyDown(KeyCode.A))
        {
            PlaySFX("SE01");
        }

        // Sキーで次の効果音を再生
        if (Input.GetKeyDown(KeyCode.S))
        {
            PlaySFX("SE02");
        }
    }

    public void PlaySFX(string clipName)
    {
        AudioClip clip = GetAudioClip(clipName);
        if (clip != null)
        {
            foreach (AudioSource audioSource in audioSourceList)
            {
                if (!audioSource.isPlaying)
                {
                    audioSource.clip = clip;
                    audioSource.Play();
                    return;
                }
            }
        }
    }

    private AudioClip GetAudioClip(string clipName)
    {
        foreach (AudioClip clip in audioClipList)
        {
            if (clip.name == clipName)
            {
                return clip;
            }
        }
        return null;
    }
}

スクリプト編集のポイント

  1. 複数のAudioClipとAudioSourceをリストで管理
    • List<AudioSource>List<AudioClip> を使い、複数の音を管理します。
  2. PlaySFXメソッドで音を再生
    • clipName を指定することで、対応する効果音を再生します。
  3. GetAudioClipメソッドで効果音を検索
    • clipName に対応するAudioClipをリストから探します。

スクリプト適用の手順

  1. AudioSourceを増やす
    • ヒエラルキーで「SoundManager」オブジェクトを選択。
    • 「Add Component」で複数のAudioSourceを追加します。
    • 追加したAudioSourceを audioSourceList にドラッグ&ドロップ。
  2. AudioClipを設定
    • プロジェクトウィンドウでインポート済みの効果音を audioClipList にドラッグ&ドロップ。
    • 「SE01」や「SE02」という名前をつけておくと便利です。

動作確認と結果

  • Unityエディターで再生ボタンを押し、AキーまたはSキーを押します。
  • Aキーで「SE01」、Sキーで「SE02」の音が鳴るのを確認してください。

これで複数の効果音を再生する仕組みが完成です!次はさらなる応用として、環境音やランダムな効果音再生なども考えてみましょう! 😊



7. 応用編

ここでは、基本的な効果音の再生方法をさらに発展させ、ゲームのクオリティを高めるための応用テクニックを紹介します!これらを組み合わせれば、より魅力的なゲーム体験を作ることができます。


1. 複数の効果音をランダム再生

同じキーを押すたびに、違う効果音をランダムに再生する方法です。

スクリプト例

using UnityEngine;

public class SoundManager : MonoBehaviour
{
    [SerializeField] private AudioSource audioSource;
    [SerializeField] private AudioClip[] audioClips;

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            PlayRandomSFX();
        }
    }

    private void PlayRandomSFX()
    {
        int randomIndex = Random.Range(0, audioClips.Length);
        audioSource.clip = audioClips[randomIndex];
        audioSource.Play();
    }
}
  • ポイント:
    • Random.Range を使って、配列 audioClips からランダムな効果音を選びます。
    • 同じボタン操作でも違う効果音が鳴るので、プレイヤーに飽きさせない工夫ができます。

2. ボリュームとピッチを動的に変更

効果音のボリュームや音程(ピッチ)を変えることで、ゲームに動きが生まれます。

スクリプト例

using UnityEngine;

public class SoundManager : MonoBehaviour
{
    [SerializeField] private AudioSource audioSource;

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            PlayWithVariation();
        }
    }

    private void PlayWithVariation()
    {
        audioSource.volume = Random.Range(0.5f, 1.0f); // ボリュームをランダムに設定
        audioSource.pitch = Random.Range(0.8f, 1.2f);  // ピッチをランダムに設定
        audioSource.Play();
    }
}
  • ポイント:
    • 音の強弱や高低を変えることで、同じ効果音でも違った印象を与えられます。

3. BGMと効果音の管理

効果音だけでなく、BGM(バックグラウンドミュージック)を管理する仕組みを追加します。

スクリプト例

using UnityEngine;

public class SoundManager : MonoBehaviour
{
    [SerializeField] private AudioSource bgmSource;
    [SerializeField] private AudioClip bgmClip;

    private void Start()
    {
        PlayBGM();
    }

    public void PlayBGM()
    {
        bgmSource.clip = bgmClip;
        bgmSource.loop = true; // BGMをループ再生
        bgmSource.Play();
    }

    public void StopBGM()
    {
        bgmSource.Stop();
    }
}
  • ポイント:
    • BGMはループ設定で再生し続けられるようにします。
    • プレイヤーがメニュー画面や特定のイベントでBGMを切り替える場合にも対応可能です。

4. トリガーやアニメーションとの連携

特定のイベント(例:敵が倒れた、アイテムを拾った)やアニメーションと連動して音を鳴らすことも可能です。

  • トリガーで音を鳴らす
    • Unityのコライダー(Collider)と「OnTriggerEnter」を使い、プレイヤーがエリアに入ったときに音を再生する仕組みを作れます。

スクリプト例

using UnityEngine;

public class TriggerSound : MonoBehaviour
{
    [SerializeField] private AudioSource audioSource;

    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            audioSource.Play();
        }
    }
}
  • アニメーションに音をつける
    • Unityのアニメーションウィンドウで「Event」を設定し、特定のフレームで音を再生できます。

5. 環境音(Ambience)の追加

ゲームの雰囲気を高めるため、風の音や川のせせらぎなどの環境音を追加します。

  1. 環境音用のAudioSourceを作成し、ループ再生を設定。
  2. 音量を一定に保つために Spatial Blend を「2D」に設定。

これらの応用テクニックを組み合わせることで、音の使い方がぐっと広がります。特にランダム再生やイベント連携は、プレイヤーに新鮮な体験を提供できるのでおすすめです。

まとめ

Unityで音を効果的に使うことで、ゲームのクオリティは大きく向上します。今回紹介した方法で効果音を実装するだけでも、プレイヤーに楽しさや臨場感を与えることができます。しかし、ゲームをもっとプロフェッショナルな仕上がりにしたいなら、高品質な効果音アセットを使うのがおすすめです。

例えば、以下のアセットはどれも多くの開発者に支持されており、初心者からプロまで幅広く利用されています。

おすすめのアセット

Game Makers Sound Effects Kit Part 1

初心者にも扱いやすい構成で、多彩な効果音が収録されています。シンプルな効果音が必要なカジュアルゲームや、基本的なプロジェクトに最適です。

Universal Sound FX

このアセットは5,000以上の効果音を収録したまさに「万能パック」。環境音からアクション音まで、どんなジャンルのゲームにも対応できるのが魅力です。ゲーム開発の可能性が広がります!

Pro Sound Collection

軽快で楽しい効果音が満載のこのアセットは、特にカジュアルゲームにぴったり。簡単に使えるので、初めての有料アセットとしてもおすすめです。


「音」って、目には見えないけどゲーム体験を大きく変える力があります。無料素材でも十分始められますが、やっぱりプロのクオリティには一味違うインパクトがありますよね。
「これを導入すれば、プレイヤーが夢中になるゲームを作れるかも!」と思ったら、ぜひこれらのアセットをチェックしてみてください。今すぐUnity Asset Storeで探してみるのも楽しいですよ! 😊


よくある質問(Q&A)

Q
AudioSourceって何ですか?
A

Unityで音を再生するためのコンポーネントです。音のボリュームや再生位置も設定できます。

Q
エラーが出るときはどうすればいいですか?
A

Consoleウィンドウに表示されるエラー内容を確認しましょう。例えば、AudioSourceが設定されていないときにエラーが出ることがあります。

Q
効果音の追加はどうすればいいですか?
A

AudioClipListに新しい効果音ファイルをドラッグ&ドロップするだけで簡単に追加できます。