UnityUnityメモ

Unityで音量を徐々に下げるスクリプトの作成方法【初心者向け】

Unity

1. はじめに

音楽や効果音は、ゲームに感情や雰囲気を与える重要な要素です。たとえば、場面が盛り上がるシーンでは音量が徐々に大きくなったり、逆に静寂が求められる場面では音量を徐々に下げる演出を使うことがよくあります。

Unityでは、音の演出も簡単にスクリプトでコントロールできます。その中でも、「音量を徐々に下げる」というテクニックは、場面の切り替えや終了時に非常に役立ちます。これにより、突然音が消えて違和感が生じるのを防ぐことができます。


このチュートリアルでは、初心者の方でもわかりやすい手順で、Unityを使って「音量を徐々に下げる」機能を実現する方法を解説します。シンプルなスクリプトを作成し、Audio Sourceに適用することで、スムーズな音のフェードアウトを実現します。

これから始める方でも安心して取り組める内容ですので、一緒に進めていきましょう!

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



2. 必要な準備

Unityで音量を徐々に下げるスクリプトを作成するには、まず必要な準備を進める必要があります。ここでは、オーディオファイルの用意からUnityプロジェクトへのインポート方法までを詳しく解説します。

オーディオファイルを用意する

まずは、音を鳴らしたい音楽や効果音のオーディオファイルを用意します。
対応しているフォーマットは、主に以下の通りです:

  • MP3
  • WAV
  • OGG

お使いのPCに保存しておきましょう。今回はサンプルとして「background_music.mp3」というファイルを用意したと仮定します。

Unityプロジェクトにオーディオファイルをインポートする

次に、用意したオーディオファイルをUnityのプロジェクトにインポートします。以下の手順で行いましょう:

  1. Unityを開く
    あなたのプロジェクトを開きます。まだプロジェクトを作成していない場合は、新しいプロジェクトを作成してください。
  2. プロジェクトウィンドウを確認
    Unityの画面下部にある「プロジェクトウィンドウ」を確認します。ここはプロジェクトのすべてのファイルが表示される場所です。
  3. オーディオファイルをドラッグ&ドロップ
    用意したオーディオファイル(例:「background_music.mp3」)を、プロジェクトウィンドウにドラッグ&ドロップします。ドロップしたファイルが正しく表示されていれば、インポートは成功です。ファイル名の左側にオーディオアイコンが表示されるはずです。
  4. インポート後の確認
    インポートしたオーディオファイルを選択し、インスペクターウィンドウでその詳細を確認します。
    • Load TypeCompression Format を適切に設定しておくと、後でパフォーマンスを最適化できますが、デフォルト設定のままでも問題ありません。

これで、Unityでオーディオを使用する準備が整いました。次は、オーディオソースを設定して音を再生する準備に進みましょう!



3. オーディオソースの設定

それでは、Unityで音楽を再生するために「オーディオソース」を設定していきましょう!以下の手順に沿って進めてくださいね。


1. メインカメラを選択する

まず、シーン内の「Main Camera」を見つけてクリックします。
これは、カメラに音を再生する機能を追加するためです。カメラがシーン全体をカバーしているので、音を均等に流すのに最適です。


2. Audio Sourceコンポーネントを追加する

次に、「Audio Source」という音を再生するためのコンポーネントをメインカメラに追加します。以下の手順で簡単に設定できます:

  1. インスペクターウィンドウを確認してください(画面右側に表示されているはずです)。
  2. Add Component」ボタンをクリックします。
  3. 検索バーが表示されるので、そこに「Audio Source」と入力します。
  4. 表示された「Audio Source」をクリックして追加します。

これで、メインカメラに音を再生する機能が追加されました!


3. オーディオクリップを設定する

次に、再生したい音楽ファイル(オーディオクリップ)を設定します。

  1. 先ほどプロジェクトにインポートした音楽ファイルを確認します。プロジェクトウィンドウに表示されていますね。
  2. インスペクターウィンドウの「Audio Source」コンポーネント内に、「Audio Clip」という項目があります。
  3. この「Audio Clip」の横にある空欄に、音楽ファイルをドラッグ&ドロップしてください。

これで、メインカメラが指定された音楽を再生する準備が整いました!


4. 再生設定を確認する

最後に、オーディオの再生設定を見直しておきましょう。

  • Play On Awake」にチェックが入っているか確認してください。
    (これにより、ゲームがスタートすると同時に音楽が再生されます)
  • Loop」にチェックを入れると、音楽が繰り返し再生されます。

これで、オーディオソースの設定は完了です!次は、音量を徐々に下げるスクリプトを作成して、音楽に演出を追加していきましょう!



4. 音量を徐々に下げるスクリプトの作成

それでは、音量を徐々に下げるスクリプトを作成していきましょう!このスクリプトは、UnityのC#スクリプトを使って実現します。具体的には、音楽が再生されている間に徐々に音量を減らしていくコードを書きます。


スクリプトを作成する手順

  1. スクリプトファイルを作成する
    • プロジェクトウィンドウを右クリックします。
    • Create」→「C# Script」を選択します。
    • スクリプト名を「SoundManager」と入力して作成します。
  2. スクリプトを編集する
    • 作成した「SoundManager」スクリプトをダブルクリックして開きます。
    • 以下のコードを入力します:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SoundManager : MonoBehaviour
{
    // AudioSourceを保持する変数
    AudioSource audioSource;

    void Start()
    {
        // AudioSourceコンポーネントを取得
        audioSource = GetComponent<AudioSource>();
        // 音量を下げる処理を開始
        VolumeChange();
    }

    // 音量を下げる処理を開始する関数
    public void VolumeChange()
    {
        StartCoroutine("VolumeDown");
    }
    
    // コルーチンを使って音量を徐々に下げる
    IEnumerator VolumeDown()
    {
        // 音量が0より大きい間ループを回す
        while (audioSource.volume > 0)
        {
            // 音量を少しずつ減らす
            audioSource.volume -= 0.01f;
            // 次の処理まで0.1秒待機
            yield return new WaitForSeconds(0.1f);
        }
    }
}

コードの解説

  1. AudioSourceコンポーネントの取得
    audioSource = GetComponent<AudioSource>();
    このコードで、オブジェクトにアタッチされたAudio Sourceコンポーネントを取得します。
  2. 音量を徐々に下げるロジック
    while (audioSource.volume > 0) { audioSource.volume -= 0.01f;
    yield return new WaitForSeconds(0.1f); }
    • whileループで、音量が0になるまで繰り返します。
    • audioSource.volume -= 0.01fで、音量を0.01ずつ減少させます。
    • WaitForSeconds(0.1f)で、次の処理まで0.1秒待機します。これにより、ゆっくり音量が下がる演出が実現します。
  3. コルーチンの活用
    • コルーチンを使うことで、時間経過を伴う処理を簡単に記述できます。
    • StartCoroutine("VolumeDown")を呼び出すと、音量を徐々に下げる処理が開始されます。

注意ポイント

  • 音量の初期値はAudio Sourceの設定で調整できます。
  • 音量を減らす量(0.01f)や待機時間(0.1f)を変更すると、フェードアウトのスピードを調整できます。

スクリプトを書き終えたら、次にこのスクリプトを適用して実際に動作させてみましょう!



5. スクリプトを適用する

作成したスクリプトをゲーム内で機能させるには、スクリプトをオブジェクトにアタッチする必要があります。以下にその手順を詳しく説明します。

スクリプトをメインカメラにアタッチする

  1. スクリプトを用意する
    先ほど作成した「SoundManager」スクリプトを確認してください。プロジェクトウィンドウの中に存在しているはずです。
  2. オブジェクトを選択する
    ヒエラルキーウィンドウで「Main Camera」をクリックして選択します。このオブジェクトはデフォルトのシーンに配置されているカメラで、Audio Sourceコンポーネントも追加されています。
  3. スクリプトをドラッグ&ドロップする
    プロジェクトウィンドウで「SoundManager」スクリプトを見つけ、左クリックで選択してそのまま「Main Camera」にドラッグ&ドロップします。
    → スクリプトが正しくアタッチされると、インスペクターウィンドウの下部に「SoundManager (Script)」という項目が追加されます。
  4. 動作確認をする
    再生ボタン(▶)をクリックしてゲームを実行します。ゲームが開始されると音量が徐々に下がるはずです。

ポイントと注意事項

  • アタッチの確認
    スクリプトが正しくアタッチされている場合、インスペクターに「SoundManager」の項目が表示されます。これが表示されていない場合は、再度ドラッグ&ドロップを試してください。
  • コンポーネントの設定を見直す
    Audio Sourceに正しいオーディオクリップが設定されていることを確認してください。クリップが設定されていない場合、音は再生されません。
  • エラーが表示される場合
    スクリプト内で間違いがある場合、Unityのコンソールにエラーメッセージが表示されます。エラー内容を確認し、コードや設定を修正しましょう。

これでスクリプトの適用は完了です!ゲームの流れに合わせて音量を調整することで、より効果的な演出を作り出すことができます。試行錯誤しながら自分だけのフェードアウト演出を作ってみてください!



6. 応用:音量フェードアウトをカスタマイズしよう!

音量を徐々に下げるスクリプトを基本的に完成させたら、さらに応用してカスタマイズをしてみましょう。ゲームやアプリで異なる演出を作りたい場合に役立ついくつかの方法を紹介します。


① フェードアウト速度を調整する

音量が下がる速度は、スクリプト内の数値で簡単に調整できます。

IEnumerator VolumeDown()
{
while (audioSource.volume > 0)
{
audioSource.volume -= 0.01f; // 減少量を調整
yield return new WaitForSeconds(0.1f); // 時間間隔を調整
}
}
  • **音量減少量(0.01f)**を大きくすれば音量が速く下がります。
  • **待機時間(0.1f)**を短くすればフェードアウトの動きがスムーズになります。

例:

  • ゆっくりフェードアウトさせたい場合:audioSource.volume -= 0.005f; yield return new WaitForSeconds(0.2f);
  • 素早く消したい場合:audioSource.volume -= 0.02f; yield return new WaitForSeconds(0.05f);

② フェードアウト完了後に再生を停止する

音量がゼロになった後にオーディオを停止することで、よりスムーズな演出が可能です。以下のコードを追加してください。

IEnumerator VolumeDown()
{
while (audioSource.volume > 0)
{
audioSource.volume -= 0.01f;
yield return new WaitForSeconds(0.1f);
}
audioSource.Stop(); // 音楽を停止
}

これにより、フェードアウト後に再生が完全に停止します。例えば、シーン遷移時やゲームオーバー時に活用できます。


③ 再生中のオーディオクリップを切り替える

ゲーム中に異なる音楽をフェードイン・フェードアウトで切り替えると、よりダイナミックな演出が可能です。以下のように実装します。

public void ChangeAudioClip(AudioClip newClip)
{
StartCoroutine(SwitchAudioClip(newClip));
}

IEnumerator SwitchAudioClip(AudioClip newClip)
{
// フェードアウト
while (audioSource.volume > 0)
{
audioSource.volume -= 0.01f;
yield return new WaitForSeconds(0.1f);
}

// 新しいクリップに変更
audioSource.clip = newClip;
audioSource.Play();

// フェードイン
while (audioSource.volume < 1)
{
audioSource.volume += 0.01f;
yield return new WaitForSeconds(0.1f);
}
}
  • ゲームのステージごとにBGMを切り替える際などに活用できます。
  • 再生中の音楽を滑らかに切り替えることで、プレイヤーの没入感が高まります。

④ トリガーや条件を使ったフェードアウト

プレイヤーのアクションやゲーム内イベントに応じて音量を変更するのも効果的です。以下は、特定の条件でフェードアウトを開始する例です。

void Update()
{
if (Input.GetKeyDown(KeyCode.Space)) // スペースキーが押されたら
{
VolumeChange(); // フェードアウト開始
}
}
  • キーボード入力だけでなく、衝突判定(OnCollisionEnter)やゲームステートの変更にも応用できます。
  • たとえば、敵に近づいた際に音楽が小さくなる、特定のエリアに入ると別の音楽に切り替わるなどの演出が可能です。

これらの応用方法を試すことで、ゲームの演出やクオリティが一段と向上します。シンプルなスクリプトでも工夫次第でさまざまな可能性が広がるので、ぜひチャレンジしてみてください!



7. まとめ

今回は、Unityで音量を徐々に下げるフェードアウトスクリプトの作成手順を解説しました。Unity初心者でも理解しやすいように、必要な準備からスクリプトの作成、適用方法までを詳しく紹介しましたが、いかがでしたでしょうか?


手順を振り返ると、以下の流れでしたね:

  1. オーディオファイルのインポート
    • 音を鳴らしたいオーディオファイルをUnityにドラッグ&ドロップするだけで準備完了!
  2. オーディオソースの設定
    • メインカメラにAudio Sourceコンポーネントを追加し、インポートしたオーディオクリップを設定しました。
  3. フェードアウトスクリプトの作成
    • プロジェクトウィンドウでC#スクリプトを作成し、音量を徐々に下げるCoroutine(コルーチン)のロジックを実装しました。
  4. スクリプトの適用
    • スクリプトをメインカメラにドラッグ&ドロップしてアタッチし、フェードアウトが機能するようにしました。

このスクリプトを活用することで、ゲーム内での音楽や効果音に自然な演出を加えることができます。例えば、場面の転換時やゲーム終了時に音をフェードアウトさせることで、より滑らかな体験を提供できます。

Unityの魅力は、このように簡単なカスタマイズでプロフェッショナルな演出が作れるところです。この記事を参考に、ぜひ自分のプロジェクトにも取り入れてみてください!

音楽のフェードアウト以外にも、再生速度を変える、特定の条件で音を切り替えるなど、オーディオの制御にはたくさんの可能性があります。これを機に、Unityのオーディオ機能をさらに深く学んでみてください!



よくある質問

Q
スクリプトが動作しない場合、どこを確認すれば良いですか?
A

Audio Sourceコンポーネントが正しく設定されているか、スクリプトが対象オブジェクトにアタッチされているかを確認してください。

Q
音量が急に0になってしまいます。どうすればいいですか?
A

スクリプト内の音量減少値(audioSource.volume -= 0.01f)を調整し、WaitForSecondsの時間も確認してみてください。

Q
複数のオーディオクリップで同じスクリプトを使う方法は?
A

同じスクリプトを複数のオブジェクトにアタッチし、それぞれのAudio Sourceに異なるクリップを設定することで対応可能です。

おすすめのアセット

「Master Audio 2022: AAA Sound」は、高品質なサウンド管理ツールです。簡単に使えるインターフェースで、音楽や効果音を効率的に管理できます。主な特徴として、音量の自動調整、音のフェードイン・アウト、複数の音声トラックの管理などがあります。また、ゲーム内の状況に応じた動的な音声制御も可能です。初心者でも使いやすく、プロのゲーム開発者にも対応しています。