【问题标题】:Unity3d AudioSource not creatableUnity3d AudioSource 无法创建
【发布时间】:2015-06-09 02:21:42
【问题描述】:

我在 unity3d 中有一个奇怪的问题。 我想使用多个音频源来播放具有重叠效果的声音。因为我自己无法解释这个问题——我只用一个 AudioSource 进行了同样的尝试。 所以我有这个脚本:

 public class audioOverlap:MonoBehaviour
 {
    private AudioSource sct;
    public AudioClip clp;
    void Start(){
       sct=new AudioSource(); 
       sct.clip=clp;//NullReferenceException!?
    } 
 }

由于 NullReferenceException - 我试图找出原因。

    void Start(){
       sct=new AudioSource(); 
       if(sct==null){Debug.Log("AudioSourceBug");/*gets executed-wtf???*/}
       if(clp==null){Debug.Log("AudioClipBug");/*gets notexecuted-okay*/}
       sct.clip=clp;//NullReferenceException!?
    } 

我知道 NullReferenceException 是什么——当链接的问题不是有效的解决方案时,请不要将其标记为重复:

我是 Unity 的初学者,但不是 C#。

【问题讨论】:

    标签: c# audio unity3d


    【解决方案1】:

    这是非常自然的 C#,但它不会飞:

    sct=new AudioSource();
    

    Unity 具有组件驱动、基于工厂的架构。 Unity 不希望调用组件构造函数,而是希望您调用 AddComponent 以将组件附加到特定的 GameObject

    sct = gameObject.AddComponent<AudioSource>();
    

    有几个原因。首先,Unity 需要每个Component 都归GameObject 所有。其次,Unity 的许多内置类实际上是代表资源的 shell,这些资源由引擎的底层原生代码层创建和管理。

    【讨论】:

    • 我真的离邮政不远了,因为我不明白这个问题......他们真的应该上课sealed(或者有理由不这样做吗?)。非常感谢。
    • @leAthlon 我也想知道如果我们不应该使用它们,为什么它们会有公共构造函数。到目前为止,我不知道,但我希望有一个原因。
    【解决方案2】:

    您是否尝试将 audioSource 添加到另一个对象(如子对象)? 也许问题在于必须在一个对象上使用音频源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      相关资源
      最近更新 更多