Единство при столкновении не воспроизводится - PullRequest
0 голосов
/ 10 апреля 2020

Я хочу воспроизводить звук при столкновении. Когда происходит столкновение, я устанавливаю следующее:

other.gameObject.SetActive(false);

Тогда в моем коде звуков воспроизведения у меня есть следующее:

public class PlaySounds : MonoBehaviour {

    public AudioClip SoundToPlay;
    public float Volume;
    AudioSource audioSound;
    public bool alreadyPlayed = false;
    void Start()
    {
        audioSound = GetComponent<AudioSource>();
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (!alreadyPlayed)
        {
            audioSound.PlayOneShot(SoundToPlay, Volume);
            alreadyPlayed = true;
        }

    }
}

Я понимаю, что вы не можете воспроизвести звук, если спрайт уничтожен, поэтому я не уничтожаю свой, но звук все равно не играет. Есть ли причина, по которой это может иметь место?

1 Ответ

0 голосов
/ 10 апреля 2020

Деактивация GameObject также деактивирует все компоненты, прикрепленные к нему. Если обратный вызов OnTriggerEnter2D, который отключает GameObject, выполняется до обратного вызова OnTriggerEnter2D, который воспроизводит звук (сценарий состояния гонки), ваш audioSound.PlayOneShot() вызов теряется.

Возможное решение - использовать AudioSource.PlayClipAtPoint , который внутренне создает AudioSource в заданном месте (в данном случае transform.position), с указанным audioClip и громкостью. Я уверен, что это решение также позволяет вам уничтожить вызывающий GameObject, вместо того, чтобы отключать его через gameObject.SetActive(false);.

...