2017-09-12 3 views
0

私のUnityプロジェクトでは、メニューが異なり、メニューごとに異なるシーンがあります。各シーンには、音楽を制御するためのボタンがあります。Unity-Musicはさまざまな場面で継続し、すべてのシーンをオフ/オンにします。

public void musicToggle(GameObject Off){ 
     if (PlayerPrefs.GetInt ("Music") == 1) { 
      musicPlayer.Stop(); 
      Debug.Log ("Stop 2"); 
      PlayerPrefs.SetInt ("Music", 0); 
      Off.SetActive(true); 
     } 
     else { 
      musicPlayer.Play(); 
      Debug.Log ("Play 2"); 
      PlayerPrefs.SetInt ("Music", 1); 
      Off.SetActive (false); 
     } 
    } 

これは私のmusicToogle機能です。すべてのシーンで音楽が再開し、音楽をオン/オフしたいシーンがあると、このコードを展開するボタンをクリックします。しかし、私は音楽がすべてのシーンチェンジを再開するのを望まず、再開したいので、すべてのシーンで音楽をオン(オン/オフ)できるようにしたい。これどうやってするの ?

+0

'musicToggle'はどのようにどこから呼び出されていますか? – Programmer

+0

ボタンに付いています。ボタンをクリックすると、コードが始まります。ボタンから呼び出されます。 –

+0

各シーンに異なるオーディオソースがありますか? – CNuts

答えて

1

私の答えはmusicPlayer変数の型であることを前提としていAudioSource

これには2つの方法は本当にあります。音楽を停止するmusicPlayer.Stopを使用しての

.Instead、

使用musicPlayer.Pause();その後、音楽を一時停止するには、それが非一時停止にmusicPlayer.UnPause();を使用するには。これにより、音楽を再開するのではなく、音楽が再開されます。

この場合、AudioSourceの各ゲームオブジェクトにDontDestroyOnLoad(gameObject);を使用して、次のシーンにいるときに破棄されないようにします。 AudioSource.time値.Store


。次回にロードしてから、再生する前にAudioSourceに適用してください。

これを行うにはPlayerPrefsを使用できますが、私はjsonとDataSaverクラスを使用して保存することをお勧めします。

保存

AudioSource musicPlayer; 
AudioStatus aStat = new AudioStatus(musicPlayer.time); 
//Save data from AudioStatus to a file named audioStat_1 
DataSaver.saveData(aStat, "audioStat_1"); 

ロード

AudioSource musicPlayer; 
AudioStatus loadedData = DataSaver.loadData<AudioStatus>("audioStat_1"); 
if (loadedData == null) 
{ 
    return; 
} 
musicPlayer.time = loadedData.audioTime; 
musicPlayer.Play(); 

あなたAudioStatusクラス:

[Serializable] 
public class AudioStatus 
{ 

    public float audioTime; 

    public AudioStatus(float currentTime) 
    { 
     audioTime = currentTime; 
    } 
} 
0

あなたはこのユニティの答えで説明したように、あなたはあなたの様々なシーンの周りにそれを渡すことができ、シングルトンクラスを作成し、あなたの最初のシーンでそれをインスタンス化する必要があります。http://answers.unity3d.com/answers/12176/view.html

関連する問題