読者です 読者をやめる 読者になる 読者になる

AudioSourceの再生が終わったかどうかを取得する方法(が見つからない...)

Unity

表題の件ですが、結局いまのところ解決していません。

AudioSourceクラスにはisPlayingというプロパティがあります。一番最初に思いつくのは、これがfalseになったら再生が終わったと判断するという手です。

しかし、これには落とし穴があって、Pause()を呼ぶとisPlayingがfalseになるのでPauseしているのと、再生が終わっているのとを区別できません。


次にtimeというプロパティを見るという手があります。こちらが0になっていたら再生が終わったと判断するという手です。

しかし、AudioSourceをPlay()した直後はtimeが0なので、これも誤作動してしまいます。

最後に、上記を併用するという手があります。

public static bool IsFinished( this AudioSource audio )
{
    return audio.time == 0.0f && !audio.isPlaying;
}

このような判定です。

しかし、これもうまくいかないことがあります。Play()した直後にPause()すると、timeは0だしisPlayingはfalseなので再生終了したと判定されてしまうのです。

結局、今のところ良い方法は思いついておりません。再生終了したタイミングでcallbackを呼ぶような仕組みを作りたかったのですが...

何か良い案があればご教授お願い致します。