Unityつまづき Audio再生ができない3
いよっしゃあああ
BGM再生の件、解決しました!!
できたら簡単じゃった…
前回、Update関数でAudioSource.Play()で実行すると、再生ボタン連打状態になって音楽が再生されぬ、ってなことを言ったわけですが
かんたんでした。
「音楽再生」ではなく、「音楽が流れてなかったら再生させる」ってな条件を一つ足してあげればよかったわけです。
以下AudioManagerのコードです
using UnityEngine; using System.Collections; public class AudioManager : MonoBehaviour { public AudioClip bgmP; //プレイ中のBGM public AudioClip bgmT; //タイムアップのときのBGM AudioSource audioSourceP; //プレイ中のAudioSource AudioSource audioSourceT; //タイムアップのときのAudioSource GameController gamecontroller; //GameContorollerコンポーネント // Use this for initialization void Start() { //AudioSourceを作成 audioSourceP = gameObject.AddComponent<AudioSource>(); audioSourceT = gameObject.AddComponent<AudioSource>(); //AudioSourceにそれぞれ音楽クリップを登録 audioSourceP.clip = bgmP; audioSourceT.clip = bgmT; //GameContorollerコンポーネント取得 gamecontroller = GameObject.Find("GameController").GetComponent<GameController>(); if (gamecontroller.state == GameController.GameState.PLAYING) { // プレイ中の音楽を流す audioSourceP.Play(); audioSourceT.Stop(); } if (gamecontroller.state == GameController.GameState.TIMEUP) { // タイムアップ中の音楽を流す audioSourceP.Stop(); audioSourceT.Play(); } } void Update() { if (gamecontroller.state == GameController.GameState.TIMEUP) { if (audioSourceT.isPlaying == false) { //BGMが再生されてなかったら // プレイ中の音楽を流す audioSourceP.Stop(); audioSourceT.Play(); } } } }
前半のAudioSourceの生成とかわたぶんもっとシンプルにできますね…。
public宣言して選択するようにすればいいわけですから。
とりあえず、AudioSouce.isPlayingで再生かどうかを判断しています。
思った通りにながれました…
ちなみにこの状態だとループ状態で流れるのでご注意を。
あーよかった…
追記
タイムアップ時にBGMがなるようになったものの、ループ再生されるので
BGMtというbool変数を用いてBGMが1回しか再生しないように修正しました。
void Update() { if (gamecontroller.state == GameController.GameState.TIMEUP) { if ( audioSourceT.isPlaying == false && BGMt == false) { //一回も再生されてない上にBGMが再生されてない // タイムアップの音楽を流す audioSourceP.Stop(); audioSourceT.Play(); BGMt = true; //1回でも再生されたらBGMtをtrueに } } }