UnityUnityメモ

Unity初心者必見!クリックで弾を発射し、発射音を鳴らす方法を解説

Unity

はじめに

こんにちは!今回は、Unityを使ってクリックしたタイミングで弾を発射し、同時に発射音を鳴らす方法を解説します。「クリックで音と弾を連動させたい!」「簡単なシューティングゲームを作りたい!」という方にぴったりの内容です。

この方法を覚えれば、ゲームに臨場感をプラスすることができます。初心者でも簡単に実装できる手順で進めていくので安心してくださいね。それでは、早速一緒に進めていきましょう!

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


1.弾のプレハブ(Prefab)を作成する

まずは弾として発射する簡単なオブジェクトを作成します。


オブジェクトを配置

  1. ヒエラルキー(Hierarchy)ウィンドウで「右クリック」→「3D Object」→「Sphere」を選択します。
  2. 名前は「Bullet」にしておきましょう。
    • これが弾として使うオブジェクトになります。

物理特性を追加

  1. ヒエラルキーで「Sphere」を選択します
  2. インスペクター画面の「AddComponent」ボタンをクリックします。
  3. 「Rigidbody」を検索して追加します。

色を変更する(任意)

  1. プロジェクトウィンドウを右クリック、「Create」→「Material」を選択します。
  2. インスペクター画面でお好みで色を設定し、「Sphere」にアタッチします。

Prefab化する

  1. 作成したオブジェクトをプロジェクト(Project)ウィンドウで選択します。
  2. プロジェクトウィンドウにドラッグ&ドロップして、プレハブ化します。



2.効果音ファイルを用意する

  1. Assetsフォルダ内に新しいフォルダを作成し、名前を「Sounds」とします。
  2. 用意した発射音のファイル(.wavまたは.mp3形式)を「Sounds」フォルダにドラッグ&ドロップして追加します。
  3. この記事ではこちらのサイトからダウンロードした効果音を使用します。

3.弾丸発射位置の設定

  1. ヒエラルキーウィンドウで「右クリック」→「Create Empty」を選んで、空のゲームオブジェクトを作成します。
  2. 名前を「SpawnPoint」に変更します。
  3. 「SpawnPoint」の位置を、弾が発射される位置に調整します(この記事ではPosition,X0,Y1,Z-5に設定しました)。

4.AudioManagerの作成

  1. ヒエラルキーで新しい空のゲームオブジェクトを作成し、「AudioManager」と名前を付けます。
  2. このオブジェクトに AudioSource コンポーネントを追加します。
    • Inspectorウィンドウの「Add Component」をクリックします
    • 「AudioSource」を検索して追加します。
  3. AudioSourceコンポーネントの「AudioClip」フィールドに、用意した発射音のファイルをドラッグ&ドロップします。
    • 「Play on Awake」のチェックを外してください(自動で再生されないようにするため)。



5. スクリプトの作成

ここからは、弾の発射と発射音の再生を行うスクリプトを作成していきます。


スクリプトファイルを作成

  1. スクリプトの作成
    • プロジェクトウィンドウを右クリックして「Create」→「C# Script」を選択します。
    • スクリプト名を「Shooting」と入力します。
  2. 作成したスクリプトを開く
    • スクリプトをダブルクリックして開きます。

コードを追加

以下のコードをスクリプトに入力してください:

using UnityEngine;

public class Shooting : MonoBehaviour
{
    public GameObject bulletPrefab; // 弾のプレハブ
    public Transform spawnPoint; // 弾の発射位置
    public float force = 10.0f; // 発射力
    public AudioSource launchSoundSource; // 効果音用AudioSource

    void Update()
    {
        // マウス左クリックを検知
        if (Input.GetMouseButtonDown(0))
        {
            Shoot(); // 弾を発射
        }
    }

    void Shoot()
    {
        // 弾を生成
        GameObject bullet = Instantiate(bulletPrefab, spawnPoint.position, spawnPoint.rotation);

        // Rigidbodyに力を加えて弾を発射
        Rigidbody bulletRigidbody = bullet.GetComponent<Rigidbody>();
        bulletRigidbody.AddForce(spawnPoint.forward * force, ForceMode.Impulse);

        // 発射音を再生
        PlayLaunchSound();
    }

    void PlayLaunchSound()
    {
        // AudioSourceで効果音を再生
        if (launchSoundSource != null)
        {
            launchSoundSource.Play();
        }
        else
        {
            Debug.LogWarning("AudioSourceが設定されていません!");
        }
    }
}

コードのポイント解説

  1. 変数の宣言
    • bulletPrefab:発射する弾丸のプレハブを指定します。
    • spawnPoint:弾丸が生成される位置を指定します。
    • force:弾丸に加える発射力を設定します。
    • launchSoundSource:発射音を再生するAudioSourceを指定します。
  2. 弾の生成
    • Instantiateを使用して、弾丸のプレハブを発射位置に生成します。
  3. 弾の発射
    • Rigidbody.AddForceを使って弾丸を前方に飛ばします。
  4. 発射音の再生
    • launchSoundSource.Play()でAudioSourceに割り当てられた効果音を再生します。
  5. エラーチェック
    • launchSoundSourceが設定されていない場合の警告メッセージをDebug.LogWarningで表示します。

1. 変数の定義(準備するもの)

まず、弾を撃つために必要なものを用意しています。

public GameObject bulletPrefab; // 弾のプレハブ
public Transform spawnPoint; // 弾の発射位置
public float force = 10.0f; // 発射力
public AudioSource launchSoundSource; // 効果音用AudioSource
  • bulletPrefab: 弾の元となる「プレハブ」を指定します。この弾が発射されます。
  • spawnPoint: 弾がどこから飛び出すかを決める位置情報です。
  • force: 弾をどれくらいの力で飛ばすかを指定します。値を変えると、弾の速さが変わります。
  • launchSoundSource: 発射時の音を再生するための音声プレイヤーです。

2. Updateメソッド(毎フレームの処理)

void Update()
{
// マウス左クリックを検知
if (Input.GetMouseButtonDown(0))
{
Shoot(); // 弾を発射
}
}
  • この部分は、毎フレーム繰り返し実行されるメインの処理です。
  • Input.GetMouseButtonDown(0):
    • マウスの左クリック(ボタン0)が押されたときに true を返します。
    • 押されたときだけ Shoot メソッドを呼び出します。

3. Shootメソッド(弾を撃つ処理)

void Shoot()
{
// 弾を生成
GameObject bullet = Instantiate(bulletPrefab, spawnPoint.position, spawnPoint.rotation);

// Rigidbodyに力を加えて弾を発射
Rigidbody bulletRigidbody = bullet.GetComponent<Rigidbody>();
bulletRigidbody.AddForce(spawnPoint.forward * force, ForceMode.Impulse);

// 発射音を再生
PlayLaunchSound();
}
  • Instantiate:
    • bulletPrefabspawnPoint.position(発射位置)と spawnPoint.rotation(向き)で作ります。これで弾がシーンに現れます。
  • Rigidbody bulletRigidbody = bullet.GetComponent<Rigidbody>():
    • 作った弾に Rigidbody(物理挙動を制御するためのコンポーネント) を探して使います。
  • AddForce:
    • 弾に力を加えます。spawnPoint.forward は「弾を発射する方向」を指しています。
    • ForceMode.Impulse は一瞬だけ力を加えるモードです。

4. PlayLaunchSoundメソッド(発射音の再生)

void PlayLaunchSound()
{
// AudioSourceで効果音を再生
if (launchSoundSource != null)
{
launchSoundSource.Play();
}
else
{
Debug.LogWarning("AudioSourceが設定されていません!");
}
}
  • launchSoundSource.Play():
    • 発射音を再生します。事前に AudioSource コンポーネントと音声クリップを設定しておく必要があります。
  • Debug.LogWarning:
    • 万が一、 launchSoundSource が設定されていなかった場合に警告を出します。

全体の流れ

  1. マウス左クリックを検知Shootメソッドを実行
  2. Shootメソッドの中で…
    • 弾を作る(Instantiate)。
    • 弾に力を加えて飛ばす(AddForce)。
    • 発射音を再生する(PlayLaunchSound)。
  3. 必要なものが足りない場合は警告を出す。



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

  1. ヒエラルキーウィンドウでAudioManagerを選択します。
  2. Shootingスクリプトをドラッグ&ドロップしてアタッチします。

スクリプトの設定

  1. Inspectorウィンドウで以下を設定します:
    • BulletPrefab:弾丸のプレハブをドラッグ&ドロップ。
    • SpawnPoint:弾丸の発射位置(「SpawnPoint」オブジェクト)を割り当てます。
    • LaunchSoundSource:発射音用のAudioSourceを設定します(「AudioManager」オブジェクトのAudioSource)。



7. 動作確認

ここまででスクリプトとオブジェクトの設定が完了しました。それでは、実際にプレイモードで動作を確認しましょう!


ゲームの実行

  1. Unityエディターで「Play」ボタンをクリックして、プレイモードを開始します。
  2. マウス左クリックをして、以下の内容を確認します:
    • 弾が設定した発射位置(SpawnPoint)から正しい方向に飛んでいる。
    • 発射時に割り当てた効果音が再生されている。

おすすめのアセット

以下の3つのアセットは、Unityでの弾発射システムに最適な効果音のアセットです。これらを使うことで、プロジェクトの完成度がぐっと上がります!気になったらチェックしてみてくださいね!


1. Gun Sound Pack

URL: Gun Sound Pack – Unity Asset Store

特徴

  • 高品質な銃器の発射音やリロード音が豊富に収録。
  • リアルなFPSやアクションゲームにぴったり。
  • 初心者から上級者まで使いやすい直感的な設計。

おすすめポイント: 「リアルな銃声を探しているなら、このアセットは外せません!種類が豊富なので、どんな武器にも適応できます。」


2. Complete FPS Weapon and Explosion Sounds

URL: Complete FPS Weapon and Explosion Sounds – Unity Asset Store

特徴

  • 銃声だけでなく爆発音まで含まれたオールインワンパック。
  • FPSやバトル系ゲームの制作に特化。
  • プロフェッショナルな音質で、即戦力として使える。

おすすめポイント: 「これ一つでサウンド周りは完璧!爆発音やリロード音も含まれているので、手軽に臨場感あふれるゲームを作れます。」


3. Dynamic Weapon Sound Kit

URL: Dynamic Weapon Sound Kit – Unity Asset Store

特徴

  • 弾丸発射、リロード、インパクト音など多彩なサウンドを収録。
  • 高いカスタマイズ性で、細部まで自分好みに調整可能。
  • 幅広いジャンルのゲームに対応。

おすすめポイント: 「カスタマイズ性が抜群で、細かい音の調整が可能!本格派のゲームを目指すならぜひ使ってみてください。」


これらのアセットはどれもUnity Asset Storeで高評価を受けている人気商品です。まずはアセットページをチェックして、あなたのプロジェクトにぴったりのサウンドを探してみてください!

よくある質問

Q
弾が発射されません。
A

弾丸プレハブにRigidbodyコンポーネントが設定されているか確認してください。

Q
発射音が聞こえません。
A

AudioSourceコンポーネントに正しい音声ファイルが割り当てられているか確認してください。

Q
効果音が重複して再生されます。
A

AudioSourceの「Play on Awake」を無効にしてください。また、PlayOneShotメソッドを使用してみてください。