Unity播放随机gameobjects位置的音频剪辑

时间:2017-04-05 17:10:33

标签: c# audio unity3d hololens

我在相机周围有8个空的游戏对象,我希望从世界上的那些点获得相同的声音。 如何正确地PlayClipAtPoint来实现这一目标。 此脚本位于我的Audio Manager Empty游戏对象上。但我希望音频来自Point1-Point8转换位置。

type [i32] cannot be dereferenced

2 个答案:

答案 0 :(得分:3)

PlayClipAtPointstatic类的AudioSource函数。您无法在实例上调用静态函数。你应该在类型上调用它:

AudioSource.PlayClipAtPoint(clip1, point1.transform.position, 0.9f);

作为旁注:我还建议您为TransformsAudioClips声明数组,并在检查器中填充它们,而不是每个都有一个公共字段。这将使得随机位置和声音的拾取变得更加容易(否则你必须手动将所有这些对象放入数组中,这显然需要更多的工作和灵活性)。

所以只需用以下内容替换所有字段声明:

public Transform[] points;
public AudioClip[] clips;

然后只需使用索引即可访问它们。

答案 1 :(得分:0)

您的完整代码如下所示:

public class AudioManagerScript : MonoBehaviour
{
     public Transform[] points;
     public AudioClip[] clips;

     public float volume = 0.9f;

     void Start()
     {
         InvokeRepeating("PlaySoundAtRandomPosition", 1.0f, 1.0f);
     }

     void PlaySoundAtRandomPosition()
     {
         // Take random position
         int rndPosIdx = Random.Range(0, points.Length);
         // Take random clip
         int rndClipIdx = Random.Range(0, clips.Length);
         AudioSource.PlayClipAtPoint(clips[rndClipIdx], points[rndPosIdx].position, volume);
     }
}

不要忘记从检查员分配相应数组中的变换和剪辑;