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秒後に破壊
}
}
インスペクタで、オーディオソースの付いたプレハブやオーディオクリップをアタッチし、スタートでそれを静的フィールドに入れます。
静的メソッドでプレハブのインスタンスを生成して、再生して数秒後に破壊されるようにします。
Cubeを破壊するときにこのメソッドを呼ぶと、Cubeが破壊された後も同じ位置で音がなり続けます。
Destroy(gameObject); // Cubeを破壊
SpeakerFactory.speaker(transform.position, 1, false);
複数のオーディオソースを簡単に作れます。