ミドリ黄のプログラミングメモノート

主にUnity(C#)を中心としたプログラムの備忘録

Unity SEが鳴り終わるまで待機する処理





はじめに

ボタンを押す⇒音を鳴らす⇒メニューを開く
などの処理をしたかったので、その方法をまとめました。




概要

実現するために必要なのはSEが鳴っていることを取得するという処理です。これは、

audioSource変数.isPlaying

により実現されます。isPlayingがTrueの間はSEが鳴っており、Falseの場合は鳴っていません。




サンプルコード

以下のプログラムでaudioSourceとaudioClipを設定して、動作させれば、キーボードの「A」を入力するとSEが鳴り、終了するとコンソールに表示します。

using System.Collections;
using UnityEngine;

public class SeTest : MonoBehaviour
{
    [SerializeField] AudioSource audioSource;
    [SerializeField] AudioClip audioClip;

    private void Update()
    {
        //Aボタンで音楽を鳴らす(2重で鳴らせないように条件を追加)
        if (Input.GetKeyDown(KeyCode.A) && !audioSource.isPlaying)
        {
            StartCoroutine(Cor());
        }
    }

    //音楽を鳴らし、鳴り終わったことを通知するコルーチン
    IEnumerator Cor()
    {
        //音楽を鳴らす
        audioSource.PlayOneShot(audioClip);

        //鳴り始めたことを表示
        Debug.Log("開始");

        //終了まで待機
        yield return new WaitWhile(() => audioSource.isPlaying);

        //終了したことを表示
        Debug.Log("終了");
    }
}