audio.PlayOneShot не работает в Unity

Я хочу, чтобы моя игра воспроизводила звук, когда игрок сталкивается с монетой, но звук не воспроизводится. Я не получаю никаких ошибок. Я подключил звук к Audio Source и скрипту в Unity.

using UnityEngine;

[RequireComponent(typeof(AudioSource))]
public class TriggerCoin : MonoBehaviour
{

    //TODO
    //Counter of collected coins

    public AudioClip coinSound;
    new AudioSource audio;

    void Start()
    {
        audio = GetComponent<AudioSource>();
    }


    void Update()
    {

    }

    void OnTriggerEnter2D(Collider2D other)
    {
        GameObject gObj = other.gameObject;

        if (gObj.CompareTag("Player"))
            {
                Debug.Log("You picked up coin!");
                audio.PlayOneShot(coinSound, 0.8f);
                Destroy(gameObject);      
            }
    }
}

person abs    schedule 23.08.2017    source источник
comment
Подумайте, это может быть из-за того, что вы уничтожаете игровой объект до того, как в клипе появится изменение для воспроизведения. Попробуй отсрочить уничтожение, Destroy(gameObject, 1f);   -  person ryeMoss    schedule 23.08.2017


Ответы (1)


См. проблему ниже:

audio = GetComponent<AudioSource>(); показывает, что AudioSource прикреплен к этому скрипту или игровому объекту, к которому прикреплен этот скрипт (TriggerCoin).

Затем вы воспроизводите аудио: audio.PlayOneShot(coinSound, 0.8f);

И немедленно уничтожьте GameObject: Destroy(gameObject);.

Уничтоженный GameObject также содержит AudioSource, так что он унесет с собой AudioSource, чтобы умереть.

Решение:

Прикрепите AudioSource к пустому игровому объекту, который не уничтожает. Назовем его "AudioHolder" и найдем его для воспроизведения аудио.

GameObject obj = GameObject.Find("AudioHolder");

AudioSource aud = obj.GetComponent<AudioSource>();

aud.PlayOneShot(coinSound, 0.8f);

Примечание:

Удалите new AudioSource audio; и переименуйте звук во что-то другое. Это хорошая идея.

person Programmer    schedule 23.08.2017