звук отменяется, когда другой начинает играть в единство - PullRequest
1 голос
/ 13 мая 2019

В основном я скопировал код из учебника, но у меня проблема с отменой звуков после воспроизведения другого звука.например, когда я стреляю и играю звук, если я бью врага, и звук взрыва играет, звук стрельбы отключается.У меня уже есть этот скрипт на пустом игровом объекте soundmanager и доступ к нему осуществляется через soundmanager.instance.playSingle (sound).я не знаю, что еще сделать, чтобы звуки не отменяли друг друга!любая помощь приветствуется

void Awake()
{
    //Check if there is already an instance of SoundManager
    if (instance == null)
        //if not, set it to this.
        instance = this;
    //If instance already exists:
    else if (instance != this)
        //Destroy this, this enforces our singleton pattern so there can only be one instance of SoundManager.
        Destroy(gameObject);

    //Set SoundManager to DontDestroyOnLoad so that it won't be destroyed when reloading our scene.
    DontDestroyOnLoad(gameObject);
}


//Used to play single sound clips.
public void PlaySingle(AudioClip clip)
{
    //Set the clip of our efxSource audio source to the clip passed in as a parameter.
    efxSource.clip = clip;

    //Play the clip.
    efxSource.PlayOneShot(efxSource.clip);
}
public void PlayCrash(AudioClip clip)
{
    //Set the clip of our efxSource audio source to the clip passed in as a parameter.
    crashSource.clip = clip;

    //Play the clip.
    crashSource.PlayOneShot(crashSource.clip);
}

public void PlayShoot(AudioClip clip)
{
    //Set the clip of our efxSource audio source to the clip passed in as a parameter.
    ShootSource.clip = clip;

    //Play the clip.
    // ShootSource.PlayOneShot();
    ShootSource.PlayOneShot(ShootSource.clip);
}

//RandomizeSfx chooses randomly between various audio clips and slightly changes their pitch.
public void RandomizeSfx(params AudioClip[] clips)
{
    //Generate a random number between 0 and the length of our array of clips passed in.
    int randomIndex = Random.Range(0, clips.Length);

    //Choose a random pitch to play back our clip at between our high and low pitch ranges.
    float randomPitch = Random.Range(lowPitchRange, highPitchRange);

    //Set the pitch of the audio source to the randomly chosen pitch.
    efxSource.pitch = randomPitch;

    //Set the clip to the clip at our randomly chosen index.
    efxSource.clip = clips[randomIndex];

    //Play the clip.
    efxSource.Play();
}

}

1 Ответ

0 голосов
/ 13 мая 2019

Вам нужно либо создать отдельный аудиоресурс, который будет обрабатывать взрывы (может быть, на объекте / классе снаряда), либо, если вам не нужно ничего необычного, вы можете использовать AudioSource.PlayClipAtPoint(). См. Документы.

Таким образом, чтобы привести его в действие, вы должны изменить свой метод PlayCrash, чтобы он принимал позицию, в которой нужно играть в аварию (или, если это не имеет значения, просто используйте Vector3.Zero

public void PlayCrash(AudioClip clip, Vector3 location)
{
    AudioSource.PlayClipAtPoint(clip, location);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...