首页 > 解决方案 > 更改场景时访问 AudioSource 对象

问题描述

我需要更新AudioSource.volumeMusicScript 对象的。关于AwakeMusicScript 类的方法,我有:

void Awake()
 {
     GameObject[] objs = GameObject.FindGameObjectsWithTag("music");
     if (objs.Length > 1)
     {
         Destroy(this.gameObject);
     }
     DontDestroyOnLoad(this.gameObject);
 }

但是在切换场景时,musicScript.audioSource被破坏了。我怎样才能保留musicScript.audioSource对象?

谢谢。

标签: c#unity3daudio

解决方案


我在这里没有看到完整的 audioSource 参考。AudioSource 对象是否附加到带有“音乐”标签的游戏​​对象上?“musicScript”实例是否也附加到带有“音乐”标签的游戏​​对象上?

我会这样做的方法是使用单例方法。只需确保要在场景之间保留的游戏对象同时附加了 musicScript 和 AudioSource 组件。然后将此代码添加到您的音乐脚本中:

private void Awake()
 {
    // if the singleton hasn't been initialized yet
    if (instance != null && instance != this)
    {
       Destroy(this.gameObject);
       return;//Avoid doing anything else
    }
 
    instance = this;
    DontDestroyOnLoad(this.gameObject);
 }

其中“instance”应该是一个musicManager 类型的变量。

来源:https ://answers.unity.com/questions/891380/unity-c-singleton.html


推荐阅读