【Unity】FPSゲームのように敵が近い時は足音を鳴らす方法をスクリプト付きで解説

【Unity】FPSゲームのように敵が近い時は足音を鳴らす方法をスクリプト付きで解説

 敵が近づいた時にプレイヤーが敵の足音を聞こえるようにする方法について記載していきます。敵が遠くにいるときは足音を聞こえないようにする方法についてもカバーしてあるので安心してくださいね。足音だけでなく、銃声や武器を切り替える音も同様に近くにいるときだけ聞こえるようにできます。それでは最後までよろしくお願いします。

距離によって音量を変えるには?

 足音を鳴らすには距離によって足音の大きさを変えれば良いのです。

 Unityには音源(オーディオソース)とそれを聞く耳(オーディオリスナー)のコーポネントがあります。

 音源となるオーディオソースの設定をいじれば距離によって音量を変えることができるわけです。

 ここで注意点ですが、絶対にオーディオリスナーはシーン内に1つだけにしてください。耳がいくつもあると動作がおかしくなる可能性があります。

オーディオソースの設定方法

 インスペクターでオーディオソースのコーポネントを開きましょう。

 音源の距離によって音量を調節するためには、3D Sound Settingsの項目を調整する必要があります。

 画像の左側にある立体音響ブレンドの項目を3Dにしましょう。

 画像右側の設定項目の機能を簡単にまとめてみました。

ドップラーレベル音源に対するドップラー効果(音源がオーディオリスナーに向かって発生している時に音量を大きくする効果)のレベルを調整します。
スプレッド音の拡散力。銃に消音アタッチメントを加えた時に、スプレッド値を変化させたりします。
ボリュームロールオフ音量が距離によって変わる倍率を変えることができます。直線的に近づけば近づくだけ音量を大きくしたり、近くまで接近したら聞こえるようにしたりと変化タイプを選べます。
最小距離音が聞こえる最小距離です。
最大距離音が届く最大距離です。
Listener
(グラフ)
距離によって変わる音の変化を直感的に操作できます。

実際に足音を鳴らすスクリプト

 それではスクリプトを実装していきます。

 音をスクリプトで制御し、ループ再生等を行う方法についてはこちらの記事で詳しく解説しています。

 気になった方はまずこちらから読んでみてください。

足音を鳴らすスクリプト

 今回は敵オブジェクトにアニメーターとオーディオソースコーポネントを張り付け、このスクリプトを付与します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class KarippuBlog : MonoBehaviour
{

//アニメーターとオーディオソースをインスペクターから指定
private Animator animator;
private AudioSource audioSource;
//足音はインスペクターで指定
public AudioClip footsteps;

public Start(){
    //アニメーターとオーディオソースを取得
    animator = GetComponent<Animator>();
    audioSource = GetComponent<AudioSource>();
}

public Update(){
    //左クリックを押すと敵が歩き出すアニメーションを開始
    if(Input.GetMouseButtonDown(0)){
        //アニメーションのトリガーを指定
    }
}

//今回の最重要ポイント!!
//アニメーション時に呼び出される関数
public void footsteps(){
    //足音を再生
    //足音のループ再生はインスペクターで指定
    audioSource.PlayOneShot(footsteps);
}

}

 これでプレイヤーに近づいた時だけ音を鳴らすことができます。