我正在Unity上制作一个2D平台游戏,我有一个名为PlayerController的脚本,我将它附加到我的播放器,其中有一系列音频剪辑。
server2.domain.com
我有一个可以访问阵列内特定音频片段的getter。
// audio
public AudioClip[] audioClip = new AudioClip[3];
private AudioClip sound;
当我在我的playercontroller类中使用getter时效果很好:
public AudioClip getSound(int clip)
{
if(clip == 0)
{
sound = GetComponent<AudioSource>().clip = audioClip[0];
return sound;
}
else if(clip == 1)
{
sound = GetComponent<AudioSource>().clip = audioClip[1];
return sound;
}
else if(clip == 2)
{
sound = GetComponent<AudioSource>().clip = audioClip[2];
return sound;
}
return sound;
}
但是,我无法从另一个类访问它:
GetComponent<AudioSource>().clip = getSound(1);
GetComponent<AudioSource>().Play();
为什么会这样?谢谢!
答案 0 :(得分:0)
在你的第二堂课中,你宣布并初始化播放器控制器。
private PlayerController audio;
然后,您尝试从PlayerController音频剪辑数组中获取音频剪辑,如下所示:
clip = audio.getSound(2);
这里的问题是统一的运作方式(基于组件的系统)。 您可以将检查器中的音频剪辑分配给脚本分配给的游戏对象上的PlayerController脚本。现在的问题是你尝试使用以下行来实例化一个新类:
private PlayerController audio;
这个新的音频对象有一个空数组,因为你没有在类中分配音频剪辑。因此没有音频片段可供接收。
这个工作的一个解决方案是获取对脚本为一的游戏对象的引用。如果你想让变量保持私有而不是你可以这样做:
audio = GameObject.Find(nameofthegameobjectthescriptison).getComponent<PlayerController>();
然后你可以使用
引用gameobject脚本的“填充”数组audio.getSound(2);
希望这会有所帮助,你理解我想说的话:)。