UnityUnityメモ

Unityでエリアごとに音量を制御する仕組みを作ろう!初心者向けチュートリアル

Unity

1. はじめに

こんにちは!Unityでゲームを作るとき、サウンドはとても重要な要素ですよね。特に、プレイヤーが特定のエリアに入ったときに音量が変化する仕組みを作ると、ゲームに臨場感を加えることができます。

例えば、プレイヤーが洞窟に入ると音楽が大きくなり、出たときには静かになるような演出を簡単に実現できます。これをUnityのOnTriggerを使って、初心者でも理解しやすい形で作ってみましょう。


この記事では、Unityを使ったことがあるけれど、まだスクリプトをあまり触ったことがない方を対象に、以下のような内容をステップバイステップで解説します:

  • 簡単なゲームオブジェクト(平面やキューブ)の作成
  • プレイヤーの動きと音量の変化を制御するスクリプトの作成
  • ゲーム内で音量が変化する仕組みをテスト

この記事を読み終えるころには、Unityで簡単なオーディオ制御の仕組みを作るスキルが身についているはずです!一緒に進めていきましょう。さあ、始めましょう!

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



2. 必要な準備

Unityでエリアごとに音量を制御する仕組みを作るには、まず基本的なプロジェクトとオブジェクトの準備を行います。ここでは、最初に必要な設定を順を追って説明します。


2.1 Unityプロジェクトの作成

  1. Unity Hubを開き、新しいプロジェクトを作成します。
  2. テンプレートは「3D」を選択し、プロジェクト名を「VolumeControl」とします。
  3. 作成ボタンをクリックしてプロジェクトを立ち上げます。

2.2 シーンの整理

  1. プロジェクトを開いたら、デフォルトで用意されているサンプルのシーン(SampleScene)をそのまま使います。
  2. 必要に応じてシーンファイルを保存してください。名前は「MainScene」にするとわかりやすいです。

2.3 必要なオブジェクトの概要

今回の仕組みを作成するために、以下のオブジェクトが必要です:

  • 平面(Plane):プレイヤーが移動する地面の役割
  • ボリュームエリア(VolumeArea):音量が変化するエリア
  • プレイヤー(Player):音量を制御する対象

2.4 サウンドファイルの準備

  1. あらかじめ音量を変更するサウンドファイル(MP3やWAV形式)を用意します。
  2. 用意したファイルをUnityの「Project」ウィンドウにドラッグ&ドロップしてインポートします。

2.5 環境の確認

  • Unityのバージョン:2021.3以上を推奨(それ以外でも可)
  • サウンドの確認用にスピーカーやヘッドホンを接続しておくと便利です。

次のセクションでは、実際にオブジェクトを作成し、シーンに配置する方法を説明します。一緒に進めていきましょう!



3. オブジェクトの作成

さて、まずはUnityのヒエラルキーウィンドウを使って、必要なオブジェクトを作成していきます。以下の手順に従って進めていきましょう!


1. 平面(Plane)の作成

  1. ヒエラルキーウィンドウで右クリックします。
  2. メニューから**「3D Object」→「Plane」**を選びます。
  3. Planeがヒエラルキーに追加され、シーンビューに表示されます。

この平面が、プレイヤーが動き回る床の役割を果たします。


2. ボリュームエリア(VolumeArea)の作成

  1. ヒエラルキーウィンドウで右クリックします。
  2. メニューから**「3D Object」→「Cube」**を選びます。
  3. Cubeが作成されたら、その名前を**「VolumeArea」**に変更します。
  4. インスペクターウィンドウで以下の設定を行います:
    • TransformのScaleを調整して、エリアの大きさを変更します(例: X=3, Y=1, Z=3)。
    • コライダー(Collider)の「Is Trigger」にチェックを入れます。

これで、ボリュームが変わるエリアを作成できました。


3. プレイヤー(Player)の作成

  1. 再びヒエラルキーウィンドウで右クリックします。
  2. メニューから**「3D Object」→「Cube」**を選びます。
  3. Cubeが作成されたら、その名前を**「Player」**に変更します。

4. マテリアルで見た目を変更する

作業がしやすいように、オブジェクトに色を付けます。

  1. プロジェクトウィンドウで右クリックし、**「Create」→「Material」**を選びます。
  2. 作成したマテリアルを以下のように設定します:
    • Player用マテリアル:青色に設定。
    • VolumeArea用マテリアル:半透明の赤に設定(Standard Shaderの「Rendering Mode」を「Transparent」に変更)。
  3. マテリアルをそれぞれのオブジェクトにドラッグ&ドロップして適用します。

これで、基本的なオブジェクトの作成と設定が完了しました!次は、ボリュームを制御するためのスクリプトを作成していきましょう!



4. 必要なコンポーネントの追加

ここでは、プレイヤーオブジェクトに必要な「Rigidbody」と「Audio Source」コンポーネントを追加し、サウンドを再生できるように設定していきます。順番に進めていきましょう!


① Rigidbodyコンポーネントの追加

プレイヤーオブジェクトが物理演算の影響を受けるようにするため、「Rigidbody」を追加します。

  1. ヒエラルキーウィンドウで「Player」を選択します。
  2. インスペクターウィンドウで「Add Component」ボタンをクリックします。
  3. 検索バーに「Rigidbody」と入力し、表示された「Rigidbody」を選択します。
  4. 追加が完了すると、インスペクターに「Rigidbody」コンポーネントが表示されます。

これで、プレイヤーが物理エンジンに対応するようになります。


② Audio Sourceコンポーネントの追加

次に、プレイヤーが音を再生できるように「Audio Source」を追加します。

  1. 「Player」を選択した状態で、再び「Add Component」ボタンをクリックします。
  2. 検索バーに「Audio Source」と入力し、表示された「Audio Source」を選択します。
  3. 「Audio Source」コンポーネントが追加されると、以下の設定が可能になります:
    • Audio Clip: 再生したい音源を設定します。
    • Volume: 音量を調整します(今回は初期値として0.3を使用します)。

③ サウンドファイルをAudio Clipに設定

事前にUnityにインポートしたサウンドファイルを設定します。

  1. プロジェクトウィンドウでインポート済みのサウンドファイルを探します
    (※サウンドファイルは.mp3.wav形式が使用できます)
  2. サウンドファイルをドラッグして、「Player」のAudio Sourceコンポーネント内の「Audio Clip」にドロップします。
  3. 再生時に問題がないかを確認するため、「Play On Awake」にチェックを入れておきましょう。

これで、プレイヤーは物理演算の影響を受けながらサウンドを再生できるようになりました。次は、エリア内でボリュームを変更するスクリプトを作成します!



5. スクリプトの作成

では、いよいよスクリプトを作成していきましょう!ここでは、プレイヤーが特定のエリア(VolumeArea)に入ったときに音量を徐々に上げ、エリアから出たときに徐々に下げる仕組みを作ります。

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

  1. プロジェクトウィンドウでスクリプトを作成
    • プロジェクトウィンドウ内で右クリックし、「Create」→「C# Script」を選択します。
    • 新しいスクリプトの名前を「VolumeChange」に変更します。
  2. スクリプトを開いてコードを記述
    • 作成したスクリプトをダブルクリックして開きます。
    • 以下のコードを入力してください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class VolumeChange : MonoBehaviour
{
    AudioSource audioSource; // オーディオソースを制御する変数
    public bool volumeUp;    // ボリュームが上がっているかどうかのフラグ

    void Start()
    {
        // AudioSourceコンポーネントを取得
        audioSource = GetComponent<AudioSource>();
        audioSource.volume = 0.3f; // 初期音量を設定
        volumeUp = false;          // 初期状態ではボリュームが上がっていない
    }

    void Update()
    {
        // キーボード入力でプレイヤーを移動させる
        float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f;
        float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;
        transform.position = new Vector3
        (
            transform.position.x + dx, transform.position.y, transform.position.z + dz
        );
    }

    private void OnTriggerStay(Collider other)
    {
        // プレイヤーがVolumeAreaに入っている間、音量を上げる
        if (other.gameObject.name == "VolumeArea")
        {
            StartCoroutine("VolumeUp");
        }
    }

    private void OnTriggerExit(Collider other)
    {
        // プレイヤーがVolumeAreaから出たとき、音量を下げる
        if (other.gameObject.name == "VolumeArea")
        {
            StartCoroutine("VolumeDown");
        }
    }

    IEnumerator VolumeUp()
    {
        if (!volumeUp)
        {
            while (audioSource.volume < 1)
            {
                audioSource.volume += 0.01f; // 音量を徐々に上げる
                yield return new WaitForSeconds(0.1f);
            }
            volumeUp = true; // フラグを立てる
        }
    }

    IEnumerator VolumeDown()
    {
        while (audioSource.volume > 0.1f)
        {
            audioSource.volume -= 0.05f; // 音量を徐々に下げる
            yield return new WaitForSeconds(0.1f);
        }
        volumeUp = false; // フラグを下げる
    }
}
  1. スクリプトの内容のポイント解説
    • AudioSource:オーディオを制御するためのコンポーネント。これを通じて音量を変更します。
    • OnTriggerStay:プレイヤーがVolumeArea内にいる間に呼び出されるメソッドです。
    • OnTriggerExit:プレイヤーがVolumeAreaから出た瞬間に呼び出されるメソッドです。
    • コルーチン(IEnumerator):音量を一定間隔で変更するために使用しています。
  2. スクリプトを保存
    • 入力が完了したら、スクリプトを保存します。

これでスクリプトの記述が完了しました!次は、このスクリプトをオブジェクトにアタッチして動作を確認してみましょう。どんな音量変化が起きるか楽しみですね!



6. スクリプトのアタッチとテスト

さて、ここまでで準備は整いました!次は、作成したスクリプトをプレイヤーにアタッチして、実際にシーンを再生して動作を確認します。簡単な手順で進められるので、一緒にやってみましょう!


スクリプトのアタッチ方法

  1. ヒエラルキーウィンドウでプレイヤーを選択
    • ヒエラルキーウィンドウで作成した「Player」という名前のキューブをクリックして選択します。
  2. プロジェクトウィンドウからスクリプトをドラッグ&ドロップ
    • プロジェクトウィンドウで先ほど作成した「VolumeChange」スクリプトを見つけます。
    • このスクリプトをクリックしてドラッグし、プレイヤーオブジェクトにドロップします。
    • ドロップが成功すると、インスペクターウィンドウで「VolumeChange」スクリプトが表示されます。

これでスクリプトのアタッチは完了です!本当に簡単ですよね。


動作確認の手順

  1. シーンを再生
    • Unityエディター上部の再生ボタン(▶️)をクリックして、シーンを再生します。
  2. プレイヤーを操作
    • キーボードの矢印キーまたはWASDキーを使用してプレイヤーを移動させます。
    • プレイヤーが赤い半透明の「VolumeArea」エリアに入ると、オーディオのボリュームが徐々に上がります。
    • エリアから出ると、ボリュームが徐々に下がることを確認してください。

うまく動作しない場合のチェックポイント

  • スクリプトが正しくアタッチされているか?
    • 「Player」を選択し、インスペクターウィンドウで「VolumeChange」スクリプトが追加されているか確認します。
  • VolumeAreaのコライダーに「Is Trigger」がチェックされているか?
    • 「VolumeArea」を選択し、インスペクターウィンドウで「Box Collider」の「Is Trigger」にチェックが入っているか確認してください。
  • Audio Sourceにサウンドが設定されているか?
    • 「Player」の「Audio Source」コンポーネントにサウンドクリップが設定されているか確認します。

テスト結果を改善するアイデア

  • ボリュームの変化速度をスクリプト内の数値で調整することで、よりスムーズな音量制御を実現できます。
  • エリアごとに異なる音量を設定したい場合は、エリアに専用のタグを付けてスクリプトを拡張する方法もあります。

これでプレイヤーが「VolumeArea」に入ると音量が上がり、出ると下がる仕組みが完成しました!もし問題があれば、この記事のチェックポイントを確認しながら再試行してください。次はこの仕組みを応用して、より魅力的な演出を作ってみましょう!



7. おわりに

今回の記事では、Unityを使って特定のエリアに入ると音量が上がり、エリアを出ると音量が下がる仕組みを作る方法を解説しました。この機能は、ゲームの臨場感を高めるためにとても便利です。例えば、洞窟の入り口に近づくと音楽が徐々に大きくなったり、敵のエリアに入ると緊張感のある音楽が流れる、といった演出が簡単に実現できます。


今回の方法を応用すれば、音量だけでなく、ライトの明るさやオブジェクトの色の変化、エフェクトの再生など、さまざまな演出を加えることができます。たとえば以下のようなアイデアも試してみてください:

  • エフェクトの追加: エリアに入るとパーティクルエフェクト(煙や光)を発生させる。
  • 条件分岐の導入: プレイヤーの持ち物やステータスに応じてエリアの挙動を変える。
  • UIの活用: エリアに入ると警告メッセージやヒントを表示する。

Unityはこのように、少しの工夫で豊かなゲーム体験を作り出せるツールです。初心者のうちは細かい部分でつまずくこともあるかもしれませんが、実験しながら少しずつスキルを磨いていきましょう。

今後の記事では、今回の内容をさらに発展させた演出方法や、他の便利なスクリプトの作り方を紹介していきます。ぜひ挑戦してみてください!それでは、楽しいUnityライフを!



よくある質問

Q
音量が変わらない場合の原因は何ですか?
A

主な原因として以下が考えられます:

  • スクリプトが正しくアタッチされていない。
  • VolumeAreaのコライダーが「Is Trigger」にチェックされていない。
  • AudioSourceにサウンドクリップが設定されていない。
Q
音量の変化をもっとスムーズにするには?
A

コルーチン内でyield return new WaitForSeconds(0.1f);0.05fなど小さく調整することで、音量変化がスムーズになります。

Q
トリガーを複数エリアで設定できますか?
A

はい、可能です。同様のスクリプトを複数のエリアに応用できます。エリアごとに異なるボリューム設定もできます。

おすすめのアセット

様々なシーンに適した高品質の音楽が多数収録されており、シングルエンティティライセンスが付いています。収録されている楽曲は、ファンタジーやオーケストラ、エピックなど多様なジャンルをカバーしています。また、シームレスなループも多く含まれており、使いやすさ抜群です。