我在下面有一个公共AudioClip变量的脚本(#2)。当我'addComponent'时,它会丢失该引用。
我已经测试过手动将它添加到编辑器中的对象,在这种情况下它可以正常工作。为什么在运行时添加我的脚本会丢失引用?
GameObject 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'连接时,对该剪辑的引用不会通过(在我点击播放并'点击'我的触发器对象附加此脚本之后)?这导致空引用错误,因为没有找到要播放的剪辑。
我的AudioListener(位于不同的对象上)正在工作,因为在场景中正确播放了其他声音。
同样,我已经测试过将此脚本手动添加到它运行的编辑器中预先运行的任何对象。这是为什么?
答案 0 :(得分:1)
这有一个简单的解决方案。您可以执行以下操作之一:
1)创建一个预制件并将其添加到&#34; clock&#34;需要的参考资料。
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);
}
希望这有帮助。