Unity3d 脚本在使用 AddComponent() 时丢失 AudioClip 引用

Unity3d script losing AudioClip reference when using AddComponent()

下面的脚本 (#2) 带有 public AudioClip 变量。当我 'addComponent' 时,它会丢失该引用。

我已经测试过手动将它添加到编辑器中的对象,在这种情况下它工作正常。为什么我在 运行 时间内添加的脚本会丢失引用?

游戏对象 1:附加了此脚本 (#1)

void HitByRay() {
    clock = GameObject.FindGameObjectWithTag("Clock_Arrow").GetComponent<Clock>();
    clock.gameObject.AddComponent<Tick_Audio_Script>();
}

将以下脚本 (#2) 附加到 'Clock' 对象。

public int safetyCounter;
float gapToNext;
public AudioClip tickAudio;

// Use this for initialization
void Start () {
    startTicker(100);
}

void startTicker(int maxTicks)
{
    safetyCounter = maxTicks;
    gapToNext = 1f;
    playTick();

}

void playTick()
{
    Debug.Log("Tick");
    if (gapToNext < 0.1 || safetyCounter == 0)
    {
        Debug.Log("We're done...!");
        return;
    }
// **ERROR HERE CLIP NOT FOUND** 
    AudioSource.PlayClipAtPoint(tickAudio, gameObject.transform.position, 1f);

    gapToNext = gapToNext * 0.97f;
    safetyCounter--;
    Invoke("playTick",gapToNext);
}

这是编辑器中的脚本,我在其中分配了音频剪辑。

但是当它通过 'AddComponent' 附加时,对该剪辑的引用没有通过(在我点击播放和 'hit' 我的触发器对象附加这个脚本之后)?这会导致空引用错误,因为找不到要播放的剪辑。

我的 AudioListener(位于不同的对象上)正在工作,因为场景中还有其他声音正在正确播放。

同样,我已经测试过将此脚本手动添加到它工作的编辑器中 运行 之前的任何对象。这是为什么?

这有一个简单的解决方案。您可以执行以下操作之一:

1) 创建一个预制件并将其添加到 "clock" 和所需的引用。

2) 这样做:

void HitByRay() {
    clock = GameObject.FindGameObjectWithTag("Clock_Arrow").GetComponent<Clock>();
    clock.gameObject.AddComponent<Tick_Audio_Script>();
//NEW PART
    clock.gameObject.GetComponent<Tick_Audio_Script>().TickAudio = (desired Audio);
}

希望对您有所帮助。