UnityUnityメモ

Unityでクリック時に音を鳴らし、特定ボタンで音を消す仕組みを簡単実装!

Unity

1.はじめに

ゲーム開発をしていると、「クリックしたときに音を鳴らす」といった機能を実装したい場面がよくありますよね。たとえば、ゲームメニューの選択音や、オブジェクトをクリックしたときの効果音など、音はプレイヤーの体験をより豊かにしてくれます。

今回の記事では、ゲームビュー上でクリックした際に音を鳴らし、特定のボタンを押したときだけ音を消す仕組みをUnityで実装する方法を紹介します。この仕組みは、音を鳴らすだけでなく、ボタンを使って柔軟に操作できるため、さまざまなゲームで応用できます。


この記事を読むことで、以下のようなスキルを学ぶことができます:

  • Unityでオーディオを扱う基本的な方法
  • ボタンやイベントを活用した音の制御方法
  • スクリプトを使った簡単なロジックの作り方

初心者の方でもステップバイステップで進められる内容になっていますので、ぜひ一緒に挑戦してみましょう!

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



2. 必要な準備

Unityで「クリック時に音を鳴らし、特定ボタンで音を消す」仕組みを作るために、まずは以下の準備を行いましょう。


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

もしまだUnityプロジェクトを作成していない場合は、以下の手順で新しいプロジェクトを作成してください:

  1. Unity Hubを起動します。
  2. 「New Project(新しいプロジェクト)」をクリックします。
  3. テンプレートとして「3D」または「2D」を選択します。(今回のチュートリアルではどちらでもOKです)
  4. プロジェクト名を入力し、保存先フォルダーを選択します。
  5. 「Create(作成)」をクリックしてプロジェクトを生成します。

これでプロジェクトの準備は完了です!


2. オーディオファイルの準備とインポート

次に、再生したい音(オーディオクリップ)を用意し、Unityに取り込む手順を説明します。

  1. 再生したい音のファイルを準備してください。ファイル形式は、一般的な MP3WAV がUnityで利用可能です。
  2. 準備した音のファイルをUnityプロジェクトにインポートします。
    • 音のファイルをデスクトップやフォルダーからUnityエディターの Project(プロジェクト)ウィンドウ にドラッグ&ドロップしてください。
  3. インポートが成功すると、プロジェクトウィンドウ内に音のファイルが表示されます。

これでオーディオファイルの準備が整いました!


3. 必要なコンポーネントの確認

今回のチュートリアルでは、「Audio Source」コンポーネントを使用して音を再生します。また、「UI Button」を使って音を消す仕組みを作るため、Unityに以下の機能があることを確認してください:

  • Audio Source: 音の再生に必要
  • UI Button: ボタンとして操作を行うために必要

Unityを初期設定のまま使用していれば、これらの機能は問題なく利用できるはずです。


これで準備が整いました!次は、オーディオソースを設定して音を再生する仕組みを作成していきましょう。



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

このセクションでは、音を再生するための準備として「オーディオソース」を設定します。オーディオソースはUnityで音を再生するためのコンポーネントで、これをゲームオブジェクトに追加する必要があります。以下の手順に沿って進めてください。


1. 空のゲームオブジェクトを作成する

まずは、音を再生するための「空のゲームオブジェクト」を作成します。このオブジェクトは音を管理する役割を果たします。

  1. ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
  2. **「Create Empty」**を選択します。
  3. 作成したオブジェクトの名前をわかりやすいものに変更しましょう。例: AudioManager

2. オーディオソースを追加する

次に、作成したゲームオブジェクトに「オーディオソース」コンポーネントを追加します。

  1. 作成したゲームオブジェクト(例: AudioManager)を選択します。
  2. インスペクター(Inspector)ウィンドウで「Add Component」ボタンをクリックします。
  3. 表示された検索バーに「Audio Source」と入力し、リストに表示された「Audio Source」を選択します。

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

オーディオクリップは実際に再生する音声ファイルのことです。以下の手順でオーディオクリップを設定します。

  1. プロジェクトウィンドウで、インポート済みの音声ファイルを見つけます。(インポート方法は前のセクションで解説しています)
  2. インスペクターウィンドウ内の「Audio Source」コンポーネントを確認します。
  3. 「AudioClip」フィールドに音声ファイルをドラッグ&ドロップします。

4. 動作確認

ここまでで、オーディオソースに音声ファイルが設定されました。再生テストを行いましょう。

  1. **「Play on Awake」**にチェックが入っている場合、ゲーム開始時に音が再生されます。これを無効にするには、チェックを外してください。
  2. 再生確認をしたい場合は、「Audio Source」コンポーネント内の「Play」ボタンをクリックしてください。

以上でオーディオソースの設定は完了です。この設定を通じて、音を再生する準備が整いました!次のステップでは、クリック時に音を再生し、特定のボタンで音を消すためのスクリプトを作成します。



4. スクリプトの作成

ここでは、「クリック時に音を鳴らし、特定のボタンを押したときだけ音を消す」機能を実現するためのスクリプトを作成します。以下の手順に従ってスクリプトを設定しましょう。


1. スクリプトを作成する

まずは、Unityのプロジェクトウィンドウを右クリックし、「Create」→「C# Script」を選択して新しいスクリプトを作成します。名前を「PlaySoundOnClick」に設定してください。

2. スクリプトを開いてコードを記述する

作成したスクリプトをダブルクリックして開き、以下のコードを入力します。

using UnityEngine;
using UnityEngine.UI; // UI関連のクラスを使うために追加

public class PlaySoundOnClick : MonoBehaviour
{
    public AudioSource audioSource; // オーディオソースをここに設定
    public Button muteButton; // 音を消すためのボタン

    private bool isButtonHovered = false; // ボタンにカーソルが乗っているかのフラグ

    void Start()
    {
        // ボタンのイベントリスナーを設定
        muteButton.onClick.AddListener(StopAudio);
    }

    void Update()
    {
        // マウスの左ボタンが押された時
        if (Input.GetMouseButtonDown(0) && !isButtonHovered)
        {
            // 音が再生されていない場合に再生
            if (!audioSource.isPlaying)
            {
                audioSource.Play();
            }
        }
    }

    // ボタンにマウスが乗った時に呼ばれる
    public void OnPointerEnter()
    {
        isButtonHovered = true;
    }

    // ボタンからマウスが離れた時に呼ばれる
    public void OnPointerExit()
    {
        isButtonHovered = false;
    }

    // ボタンが押されたときに音を止める
    void StopAudio()
    {
        audioSource.Stop();
    }
}

3. コードのポイント解説

  1. AudioSourceButton の設定
    • このスクリプトでは、オーディオを再生するための AudioSource と、音を止めるための Button を使用します。これらは Unity のインスペクターで設定します。
  2. Update メソッドでクリックを検知
    • ゲームビュー内でクリックされたことを検知するために、Input.GetMouseButtonDown(0) を使用しています。
    • ボタン上でクリックされた場合は音を鳴らさないように、isButtonHovered フラグで制御します。
  3. ボタンのイベント設定
    • ボタンがクリックされたときに音を止める処理を実行するため、muteButton.onClick.AddListener(StopAudio) を設定します。
  4. ボタンのホバー検知
    • マウスがボタンに乗ったかどうかを検知するために OnPointerEnterOnPointerExit メソッドを使います。これにより、ボタン上ではクリック音が鳴らないようにしています。

4. スクリプトをアタッチする

スクリプトを記述したら、以下の手順でオブジェクトにアタッチします。

  1. ヒエラルキーで、オーディオソースを持つオブジェクトを選択します。
  2. スクリプト「PlaySoundOnClick」を、このオブジェクトにドラッグ&ドロップしてアタッチします。
  3. インスペクターで、以下のフィールドに適切なオブジェクトを割り当てます。
    • AudioSource フィールドに、オーディオソースを持つオブジェクトをドラッグ&ドロップします。
    • MuteButton フィールドに、作成したボタンオブジェクトをドラッグ&ドロップします。

これでスクリプトの作成と設定は完了です!次はボタンの設定に進みましょう。



5. ボタンの設定

ここでは、音を消すためのボタンをUnityで作成し、スクリプトと連携する方法を説明します。この手順を進めれば、ボタンをクリックしたときに音を停止する仕組みが完成します!


ボタンを作成する

  1. UIボタンを追加
    • ヒエラルキー(Hierarchy)ウィンドウを右クリックし、「UI」→「Button」を選択します。
    • これで、シーンにボタンが追加され、CanvasとEventSystemも自動的に作成されます。
  2. ボタンの位置とサイズを調整
    • ヒエラルキーウィンドウで作成したボタンを選択します。
    • インスペクター(Inspector)ウィンドウで「Rect Transform」を調整し、画面上で見やすい位置と適切なサイズに変更します。
  3. ボタンのテキストを変更
    • ヒエラルキーウィンドウで「Button」を展開し、「Text(TMP)」を選択します。
    • インスペクターウィンドウで「Text」フィールドに「Mute」などの分かりやすいラベルを入力します。

スクリプトにボタンを設定する

  1. ボタンをスクリプトに関連付ける
    • ヒエラルキーウィンドウで「Audio Source」を持つオブジェクトを選択します。
    • インスペクターウィンドウで、アタッチ済みの「PlaySoundOnClick」スクリプトを確認します。
    • スクリプトの「Mute Button」フィールドに、作成したボタンをドラッグ&ドロップします。

ボタンのイベント設定

次に、ボタンがクリックされたときやカーソルがボタンに乗ったときにイベントを発生させる設定を行います。

  1. Event Triggerの追加
    • ヒエラルキーウィンドウで作成したボタンを選択します。
    • インスペクターウィンドウの「Add Component」をクリックし、「Event Trigger」を追加します。
  2. Pointer EnterとPointer Exitを設定
    • Event Triggerの設定内で「Add New Event Type」をクリックし、「Pointer Enter」と「Pointer Exit」を選択します。
    • それぞれのイベントに「PlaySoundOnClick」スクリプトの「OnPointerEnter」と「OnPointerExit」を関連付けます。
      • 「+」ボタンを押してリスナーを追加します。
      • ドロップダウンメニューで「PlaySoundOnClick」を持つオブジェクトを指定し、対応する関数を選択します。

ボタンの設定部分が完成しました!次はテスト結果を確認し、必要に応じて調整を行いましょう。



6. 動作確認

ここまでで、クリック時に音を鳴らし、特定のボタンを押したときだけ音を消す仕組みの設定が完了しました。それでは、実際にゲームビューで動作を確認してみましょう。


動作確認手順

  1. ゲームを再生する
    Unityエディター上部にある再生ボタン(三角形のアイコン)をクリックして、ゲームを再生します。
  2. クリックして音を確認
    ゲームビュー上で画面のどこかをクリックしてみましょう。音が再生されるはずです。
    • 音が鳴らない場合は、以下のポイントを確認してください:
      • スクリプトの「AudioSource」フィールドにオーディオソースが設定されているか。
      • 「Audio Source」コンポーネントの「Mute」がチェックされていないか。
  3. ボタンの動作確認
    次に、作成したボタンにカーソルを合わせてみてください。
    • ボタンにカーソルが乗ると、クリックしても音が鳴らないことを確認します。
    • ボタンからカーソルを外すと、再びクリック時に音が鳴るはずです。
  4. ボタンをクリックして音を停止
    ボタンをクリックすると、音が完全に停止することを確認します。

トラブルシューティング

もし期待通りに動作しない場合は、以下を確認してください。

  1. オーディオが鳴らない場合
    • オーディオファイルのインポート: オーディオクリップが正しくインポートされているか確認してください。フォーマットがUnityに対応している(例:.mp3, .wav)必要があります。
    • Audio Sourceの設定: オーディオソースに正しいオーディオクリップが設定されているか確認しましょう。
  2. ボタンイベントが動作しない場合
    • Event Triggerの設定: 「Pointer Enter」と「Pointer Exit」のイベントが正しく設定されているか確認してください。スクリプト内の対応する関数(OnPointerEnterOnPointerExit)がリンクされている必要があります。
    • muteButtonの設定: スクリプト内の「muteButton」に正しいボタンが設定されているか確認してください。
  3. クリック時に音が鳴らない場合
    • スクリプトのアタッチ: 作成したスクリプト「PlaySoundOnClick」がオーディオソースを持つゲームオブジェクトにアタッチされているか確認してください。
    • コードエラー: スクリプトにエラーがないか確認します。エディターのコンソールにエラーが表示されている場合は、その内容を確認して修正してください。

以上の確認と修正を行えば、正常に動作するはずです。ここまで設定できたら、次はさらに応用して音やイベントを増やしてみるのも良いですね!



7. まとめ

この記事では、Unityでクリック時に音を鳴らし、特定のボタンを押したときに音を止める仕組みを作る方法をステップバイステップで解説しました。

まず、オーディオクリップをUnityプロジェクトにインポートし、オーディオを再生するために必要な「Audio Source」を設定しました。その後、スクリプトを作成し、クリック時に音を鳴らすロジックを実装しました。そして、特定のボタンで音を止める機能を作るために、UIボタンとイベントトリガーの設定方法を説明しました。


これらの手順を通じて、Unityでのサウンド管理やスクリプトによるイベント処理の基本が学べたと思います。今回の仕組みをさらに応用して、クリックごとに異なる音を鳴らしたり、複数のボタンで異なる操作を実行したりすることも可能です。例えば、複数のボタンを追加し、それぞれに異なるイベントトリガーやスクリプトを割り当てれば、より高度なインタラクションが実現できます。

ゲーム開発において音は、プレイヤーの体験を大きく向上させる重要な要素です。このチュートリアルを活用して、より魅力的なゲームを作ってみてください!



よくある質問

Q
オーディオクリップが再生されません。どうすればいいですか?
A

以下の点を確認してください:

  1. オーディオクリップの設定
    オーディオクリップが正しく「Audio Source」の「AudioClip」フィールドに設定されているか確認してください。また、クリップが対応している形式(MP3、WAVなど)である必要があります。
  2. ミュート設定
    「Audio Source」の「Mute」にチェックが入っていないか確認してください。チェックが入っていると音が再生されません。
  3. ボリューム設定
    「Audio Source」の「Volume」スライダーが0になっていないか確認してください。
  4. スクリプトの設定
    スクリプト内で「AudioSource.Play()」が正しく呼び出されているか、またエラーが発生していないか確認してください。
Q
ボタンのイベントがうまく動作しません。何を確認すればいいですか?
A

以下の点を確認してください:

  1. Event Triggerの設定
    ボタンに「Event Trigger」コンポーネントが追加されているか確認し、「Pointer Enter」と「Pointer Exit」のイベントが正しく設定されているか確認してください。
  2. スクリプトのアタッチ
    スクリプトがオーディオソースのオブジェクトに正しくアタッチされているか確認してください。また、「muteButton」フィールドにボタンがドラッグ&ドロップされていることを確認しましょう。
  3. ボタンの有効化
    ボタンが有効(Enabled)になっていることを確認してください。誤って非アクティブにしている場合、イベントは動作しません。
Q
他のオブジェクトのクリック音を追加するにはどうすればいいですか?
A

別のオブジェクトにもクリック音を追加したい場合、以下の手順を行います:

  1. 新しいオーディオソースの作成
    クリック音を再生したいオブジェクトに新しい「Audio Source」を追加します。それぞれのオーディオソースに異なるオーディオクリップを設定してください。
  2. スクリプトを拡張
    スクリプト内でクリック対象のオブジェクトごとに「AudioSource.Play()」を呼び出すロジックを追加します。例えば、クリックされたオブジェクトを特定するには「Raycast」を使うことができます。
  3. イベントの追加
    必要に応じて、UI要素(ボタンなど)ごとに独自の音を割り当てて管理する方法を検討してください。

おすすめのアセット

「Game Makers Sound Effects Kit 4 Pt.2」は、ゲームや映像制作に最適なサウンドエフェクトパックです。このアセットには、さまざまなシチュエーションで使える2,800種類以上の効果音が含まれており、全体のファイルサイズは2.7GBと非常に豊富です。サウンドは高品質で、UI、動き、Sci-Fi効果音など多様なジャンルに対応しています​