Unity2D。无法从其他课程访问我的音频。

时间:2017-08-25 03:57:29

标签: c# audio 2d unity5 unity2d

我正在Unity上制作一个2D平台游戏,我有一个名为PlayerController的脚本,我将它附加到我的播放器,其中有一系列音频剪辑。

server2.domain.com

enter image description here

我有一个可以访问阵列内特定音频片段的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();

为什么会这样?谢谢!

1 个答案:

答案 0 :(得分:0)

在你的第二堂课中,你宣布并初始化播放器控制器。

private PlayerController audio;

然后,您尝试从PlayerController音频剪辑数组中获取音频剪辑,如下所示:

clip = audio.getSound(2);

这里的问题是统一的运作方式(基于组件的系统)。 您可以将检查器中的音频剪辑分配给脚本分配给的游戏对象上的PlayerController脚本。现在的问题是你尝试使用以下行来实例化一个新类:

private PlayerController audio;

这个新的音频对象有一个空数组,因为你没有在类中分配音频剪辑。因此没有音频片段可供接收。

这个工作的一个解决方案是获取对脚本为一的游戏对象的引用。如果你想让变量保持私有而不是你可以这样做:

audio = GameObject.Find(nameofthegameobjectthescriptison).getComponent<PlayerController>();

然后你可以使用

引用gameobject脚本的“填充”数组
audio.getSound(2);

希望这会有所帮助,你理解我想说的话:)。