UnityUnityメモ

Unityのサウンド再生!Play()とPlayOneShot()の違いと使い方を徹底解説

Unity

1. はじめに

ゲームにおいて「音」は、プレイヤーの体験を大きく左右する重要な要素です。例えば、盛り上がるシーンで流れるBGMや、敵を倒した瞬間の爽快な効果音など、音があることでゲームの世界観がより深まります。

Unityではサウンドを簡単に扱うための機能が豊富に用意されています。その中でも、特に基本となるサウンド再生の方法が「Play()」と「PlayOneShot()」です。どちらもオーディオソース(AudioSource)を使って音を再生するのですが、この2つには明確な違いがあります。

この記事では、Play()とPlayOneShot()の特徴と使い分けについてわかりやすく解説します。また、それぞれを使用するためのスクリプト例も紹介するので、Unity初心者でも簡単に実装できるようになります。

ゲーム制作において、状況に応じて適切な方法を選ぶことは非常に重要です。このステップをマスターすることで、サウンドを自在に操れるようになり、あなたのゲームがさらに魅力的になるでしょう!

さあ、早速学んでいきましょう!

Unityを触ったことがないという方はコチラの記事から見てみてください!



2. Play()とPlayOneShot()の違いとは?

Unityでサウンドを再生する際、Play()とPlayOneShot()の2つの方法があります。それぞれに特徴があり、使用する場面が異なります。ここでは、その違いについて詳しく解説します。


Play()

Play() は、AudioSourceコンポーネントに設定されたAudioClipを再生するシンプルな方法です。しかし、この方法では 一度に1つの音しか再生できません。つまり、同じAudioSourceを使って音を重ねて再生することはできないため、以下のような場合に適しています。

  • BGM(バックグラウンドミュージック)
    長時間再生される音に最適です。同じ音を繰り返し再生する必要がないため、効率的です。
  • 単発の効果音
    例えば、プレイヤーが特定のアクションを取った際に鳴らす短い効果音など。

注意点: Play()を呼び出すと、現在再生中の音は停止して新しい音が再生されます。そのため、例えば2回連続でPlay()を呼び出しても、2回目の再生が最初の再生を中断してしまいます。


PlayOneShot()

PlayOneShot() は、指定したAudioClipを再生する方法で、特に 音を重ねて再生したい場合に適しています。PlayOneShot()を使用することで、現在再生中の音を妨げることなく、同じAudioSourceから音を複数重ねて再生できます。

この特徴を活かせる例として以下が挙げられます。

  • 銃の発砲音
    短時間で何度も発生する音に最適です。例えば、連射する銃の発砲音など。
  • キャラクターの足音
    移動のたびに連続して発生する効果音に適しています。

注意点: PlayOneShot()では、再生するたびにAudioClipを指定する必要があります。もしAudioClipが指定されていない場合、エラーが発生します。


違いのまとめ

特徴Play()PlayOneShot()
同時再生1つの音のみ複数の音を同時に再生可能
用途BGMや長い効果音短い効果音や連射音
AudioClip指定AudioSourceに設定済みのクリップメソッド呼び出し時に指定が必要

これらの特徴を理解して、どちらを使用するかをシーンに応じて選択してください。次に、実際にスクリプトを使ったサウンド再生の方法を詳しく解説します!



3. 実用例

Unityでサウンドを再生する方法として、Play()PlayOneShot() の使い方を具体的に説明します。それぞれの特徴を活かしたスクリプト例を見ていきましょう。


3.1 Play()を使ってBGMを再生する

Play() は、長いBGMや一度に1つだけ再生する音に向いています。ここでは、ゲームの開始時にBGMを再生する例を紹介します。

必要な準備

  1. プロジェクトに再生したい音声ファイル(AudioClip)をインポートします。
  2. ヒエラルキー(Hierarchy)でオブジェクトを作成し、AudioSource コンポーネントを追加します。

スクリプト例 以下のスクリプトを作成して、BGMを再生します。

using UnityEngine;

public class BGMPlayer : MonoBehaviour
{
    public AudioSource audioSource; // オーディオソースをアタッチします

    void Start()
    {
        // BGMを再生する
        audioSource.Play();
    }
}

手順

  1. スクリプトをプロジェクト内で作成し、適当なオブジェクトにアタッチします。
  2. Inspector(インスペクター) ウィンドウで、AudioSource フィールドにヒエラルキー上の AudioSource をドラッグ&ドロップします。
  3. ゲームを実行すると、自動的にBGMが再生されます。

3.2 PlayOneShot()を使って効果音を再生する

PlayOneShot() は、音を重複して再生したい場合に便利です。例えば、連射する銃の音や短い効果音の再生に適しています。

必要な準備

  1. 再生したい効果音ファイル(AudioClip)をプロジェクトにインポートします。
  2. ヒエラルキーの任意のオブジェクトに AudioSource コンポーネントを追加します。

スクリプト例 以下のスクリプトで、マウスの左クリック(Fire1)で効果音を再生します。

using UnityEngine;

public class ShotSoundPlayer : MonoBehaviour
{
    public AudioSource audioSource; // オーディオソースをアタッチします
    public AudioClip shotClip; // 再生したい効果音を設定します

    void Update()
    {
        if (Input.GetButtonDown("Fire1")) // 左クリックなどの入力を検出
        {
            // 効果音を再生する
            audioSource.PlayOneShot(shotClip);
        }
    }
}

手順

  1. スクリプトをプロジェクトに作成し、任意のオブジェクトにアタッチします。
  2. Inspector(インスペクター) で、AudioSource フィールドに AudioSource コンポーネントを、shotClip フィールドに再生したい効果音をドラッグ&ドロップします。
  3. ゲームを実行し、指定した入力(例えばマウスの左クリック)を行うと、効果音が再生されます。

これで、Play()PlayOneShot() を使ったサウンド再生の基本が理解できます。それぞれの使い分けを意識して、ゲームに必要なサウンドを自由に実装してみましょう!



4. 使い分けのポイント

UnityでPlay()とPlayOneShot()を使い分ける際には、それぞれの特性を理解し、どのような場面で適しているのかを考えることが重要です。以下に、具体的な使い分けのポイントをまとめました。


1. BGMや長時間の効果音にはPlay()を使用

Play()は、一度に1つの音しか再生できない特性があります。そのため、バックグラウンドミュージック(BGM)や長時間再生する効果音(例: 環境音やループするサウンド)に最適です。Play()を使うと、再生中に同じサウンドを重複させることがないため、混乱を避けられます。

  • 例: ゲームのメインテーマ曲や、雨音のループ再生。
  • 注意点: 再生中のサウンドを止めたい場合はaudioSource.Stop()を使います。

2. 短い効果音や重複が必要な音にはPlayOneShot()を使用

PlayOneShot()は、同じ音を重複して再生できるため、短い効果音や頻繁に発生するサウンドイベント(例: 銃声や足音)に適しています。これにより、サウンドが途切れることなく、臨場感を演出できます。

  • 例: プレイヤーが連射武器を撃つ音や敵が複数回ダメージを受けたときの音。
  • 注意点: 重複再生が多すぎるとパフォーマンスに影響する可能性があるため、必要以上に多用しないようにしましょう。

3. 同じオーディオソースで両方を組み合わせる場合

Play()とPlayOneShot()を同じオーディオソースで使うことも可能ですが、使用時の注意が必要です。例えば、Play()でBGMを再生しつつ、PlayOneShot()で効果音を再生する場合、効果音がBGMに干渉しないように設定を工夫する必要があります。

  • ポイント: Play()でループするサウンドを再生しているオーディオソースとは別のオーディオソースを用意するのがベスト。
  • メリット: 各オーディオソースごとに役割を分けることで管理が簡単になります。

4. オーディオミキシングを活用して調整

複数のサウンドを同時に再生する場合、音量や優先順位の調整が重要です。Unityのオーディオミキサーを使用すると、BGMと効果音をバランスよくミックスできます。

  • 例: BGMの音量を効果音より低く設定して、効果音が埋もれないようにする。
  • 操作: AudioMixerでグループを設定し、個別の音量やフィルター効果を調整します。

5. シーンごとに適切な設定を選ぶ

どのサウンド再生方法を使用するかは、ゲームのシーンや状況によって異なります。以下のようなシーンごとの例を参考にしてください:

  • 冒険ゲームのフィールドBGM: Play()でループ再生。
  • バトルシーンでの攻撃音: PlayOneShot()で重複再生。
  • 特定のイベントシーン: Play()で長いイベント効果音を再生。

Play()とPlayOneShot()の使い分けは、ゲームの音響体験に大きな影響を与えます。それぞれの特性を活かして、プレイヤーが没入感を感じられるサウンド設計を目指しましょう!



よくある質問

Q
Play()とPlayOneShot()のパフォーマンスの違いは?
A

Play()とPlayOneShot()は、使い方によってパフォーマンスへの影響が異なります。Play()はオーディオソースが1つだけ動作するため、シンプルでリソースの消費が少ないです。一方、PlayOneShot()は毎回音を重ねて再生するため、同時に多くの音を再生するとリソースを多く使用します。ただし、一般的なゲームでは問題になることは少ないので、必要な場面で適切に使い分ければ十分です。

Q
再生中の音を止めたい場合はどうすればいい?
A

再生中の音を止めるには、以下のように**AudioSource.Stop()**を使用します。
例:

audioSource.Stop();

ただし、PlayOneShot()で再生した音はAudioSource全体を管理していないため、Stop()で止めることはできません。この場合、サウンドの長さをコントロールするのではなく、音量を調整するか別の手法を検討してください。

Q
PlayOneShot()でボリュームを調整できますか?
A

はい、PlayOneShot()では再生時にボリュームを設定できます。以下のように、第2引数でボリュームを指定します。
例:

audioSource.PlayOneShot(shotClip, 0.5f); // 音量50%で再生

0.0fから1.0fの範囲でボリュームを設定できます。これを利用して、音の大きさを状況に応じて調整することが可能です。

おすすめのアセット

「Master Audio 2024: AAA Sound」は、Unityでのオーディオ管理を簡単にし、高品質なサウンド体験を提供するツールです。これを使えば、複雑な音声システムも直感的に設定でき、リアルなサウンドを効率的に実現できます。マルチプレイヤーゲームやモバイル向けに最適化されており、プレイリストやボリューム管理などの機能も充実。プロジェクトにAAAクオリティのサウンドを導入したい方におすすめです。