【Unity2d】如何避免物体被销毁时绑定的音效消失

       在2d游戏项目案例(金山打字)中,当我们销毁字母游戏对象时,如果我们使用Audio Source组件播放销毁音效会发现,当我们按下字母销毁物体时,音效并没有如我们预想的一样进行销毁后播放,这是因为游戏对象被销毁了,那么游戏对象所绑定的所有组件都会被销毁,导致无法播放音效,为解决这个问题,博主给大家介绍一种方法,如下:

       采用static void PlayClipAtPoint(AudioClip audioClip,Vector3 position,float volume=1.0f),虽然播放的是3D音效,但依旧可以实现我们的功能,因为使用AudioSource.PlayClipAtPoint()播放声音,会在层级面板自动生成一个名为"One shot audio"的物体,播放完后自动删除,但还是存在音量较小的问题,解决音量的问题,因为PlayClipAtPoint()的音效大小与摄像机的位置有关,我们只需要把Main Camera的高度给调低即可,相机越靠近背景图层,音量越大。代码如下:

    public AudioClip audioClip;
    public float speed;
    public string alphabet;
    public static int score = 0;

    void Start()
    {

        //speed = Random.Range(0.8f, 1.5f);//简单
        speed = Random.Range(3f, 5f); ;//中等
    }
    
    // Update is called once per frame
    void Update()
    {
        transform.Translate(Vector3.down * Time.deltaTime * speed);
        if (Input.GetKeyDown(alphabet))
        {
            AudioSource.PlayClipAtPoint(audioClip, Vector3.zero, 1.0f);//播放音效
            Destroy(this.gameObject);
            score++;
        }
        if (transform.position.y < -3.5f)
        {
            Destroy(this.gameObject);
        }
    }

       再给大家介绍一下播放2D音效的函数:static void PlayOneShot(AudioClip audioClip,float volume=1.0f),但PlayOneShot()不像PlayClipAtPoint()一样,PlayOneShot()需要实例化对象才可以实现,即需要绑定AudioSource组件,这样又回到了最初我们未解决上述问题的状态,针对销毁音效不可行,下面是该函数的使用规范:

    public AudioClip audioClip;
    public AudioSource audioSource;

    audioSource.PlayOneShot(audioClip, 1.0f);//需放入函数中

猜你喜欢

转载自blog.csdn.net/m0_51942776/article/details/127718491