1

私は、以下GameObjectのレベル01を持っています。ゲームが開始されると、スクリプトが実行され、音楽の再生が開始されます。Audio Sourcescript

私が抱えている問題は、新しいレベルをロードするたびに音が大きくなることです。なぜこれが起こっているのかわかりません。誰かが理由を説明し、解決策を提供するか、正しい方向に向けることができますか?

using UnityEngine;
using System.Collections;

public class MusicManagerScript : MonoBehaviour
{
    public AudioClip[] songs;
    int currentSong = 0;

    // Use this for initialization
    void Start() {
        DontDestroyOnLoad(gameObject);
    }

    // Update is called once per frame
    void Update() {
        if (audio.isPlaying == false) {
            currentSong = currentSong % songs.Length;
            audio.clip = songs[currentSong];
            audio.Play();
            currentSong++;
        }
    }
}
4

1 に答える 1

1

編集: あなたの答えは、カメラが単に 3D オーディオ ソースに近いというものだったようですが、一般的な問題に対する一般的な解決策であるため、とにかくここに私の答えを記載しました。

ミュージック マネージャーを含むシーンに入るたびにミュージック マネージャーをインスタンス化していますが、サウンドを複製するミュージック マネージャーを破棄することはありません。必要なのはシングルトンです。これは、複数のインスタンスを決して許可しないようにコードに指示する方法です。これを試して:

public class MusicManagerScript : MonoBehaviour
{
    private static MusicManagerScript instance = null;

    public AudioClip[] songs;
    int currentSong = 0;

    void Awake()
    {
        if (instance != null)
        {
            Destroy(this);
            return;
        }
        instance = this;
    }

    // Use this for initialization
    void Start()
    {
        DontDestroyOnLoad(gameObject);
    }

    // Update is called once per frame
    void Update()
    {
        if (audio.isPlaying == false)
        {
            currentSong = currentSong % songs.Length;
            audio.clip = songs[currentSong];
            audio.Play();
            currentSong++;
        }
    }

    void OnDestroy()
    {
        //If you destroy the singleton elsewhere, reset the instance to null, 
        //but don't reset it every time you destroy any instance of MusicManagerScript 
        //because then the singleton pattern won't work (because the Singleton code in 
        //Awake destroys it too)
        if (instance == this)
        {
            instance = null;
        }
    }
}

インスタンスは静的であるため、すべての音楽マネージャー スクリプトがアクセスできます。すでに設定されている場合は、作成時に自分自身を破棄します。

于 2014-04-22T13:06:23.283 に答える