【Unity】何も無い場所で音を再生

投稿者: | 2020-12-18

Cubeを破壊した後に、その位置で音を鳴らしてみました。Cubeのオーディオソースで再生しても破壊すると音が止まるので、同じ場所にオーディオソースの付いたゲームオブジェクトを生成します。

生成するためのクラスを作りました。

using UnityEngine;

public class SpeakerFactory : MonoBehaviour
{
    [SerializeField] GameObject speakerPrefab;
    [SerializeField] AudioClip[] audioClips;
    static AudioClip[] staticAudioClips;
    static GameObject staticSpearkerPrefab;

    // Start is called before the first frame update
    void Start()
    {
        staticSpearkerPrefab = speakerPrefab;
        speakerPrefab = null;
        staticAudioClips = audioClips;
        audioClips = null;
    }

    public static void speaker(Vector3 speakerPosition, int clipIndex, bool loop = true, float blend = 1f)
    {
        if (clipIndex > staticAudioClips.Length - 1 || clipIndex < 0) return;

        GameObject obj = Instantiate(staticSpearkerPrefab, speakerPosition, Quaternion.identity);
        AudioSource audioSource = obj.GetComponent();
        audioSource.clip = staticAudioClips[clipIndex];
        audioSource.loop = loop;
        audioSource.spatialBlend = blend;
        audioSource.Play(); // 再生

        Destroy(obj, 6f); // 6秒後に破壊
    }

}

インスペクタで、オーディオソースの付いたプレハブやオーディオクリップをアタッチし、スタートでそれを静的フィールドに入れます。

AudioSourceの付いたプレハブ
生成スクリプト

静的メソッドでプレハブのインスタンスを生成して、再生して数秒後に破壊されるようにします。

Cubeを破壊するときにこのメソッドを呼ぶと、Cubeが破壊された後も同じ位置で音がなり続けます。

Destroy(gameObject); // Cubeを破壊
SpeakerFactory.speaker(transform.position, 1, false);
音を鳴らすオブジェクトが生成
数秒後に消える

複数のオーディオソースを簡単に作れます。

コメントを残す

メールアドレスが公開されることはありません。