首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity在随机的游戏对象位置播放音频剪辑

Unity在随机的游戏对象位置播放音频剪辑
EN

Stack Overflow用户
提问于 2017-04-06 01:10:33
回答 2查看 543关注 0票数 0

我在相机周围有8个空的游戏物体,我想要从世界上的这些点发出相同的声音。如何才能正确地使用PlayClipAtPoint来完成此操作。这个脚本在我的音频管理器空游戏对象上。但我希望音频来自Point1-Point8变换位置。

代码语言:javascript
复制
public class AudioManagerScript : MonoBehaviour
{
public Transform point1;
public Transform point2;
public Transform point3;
public Transform point4;
public Transform point5;
public Transform point6;
public Transform point7;
public Transform point8;
// Use this for initialization
public AudioClip clip1;
public AudioClip clip2;
public AudioClip clip3;
public AudioClip clip4;
public AudioClip clip5;
public AudioClip clip6;
public AudioClip clip7;
public AudioClip clip8;
public AudioClip clip9;
public AudioClip clip10;

public AudioSource audio;

void Start()
{
    InvokeRepeating("myFunc", 1.0f, 1.0f);
    audio = GetComponent<AudioSource>();
}

void myFunc()
{
    audio.PlayClipAtPoint(clip1,point1.transform.position,0.9f);
}

}
EN

回答 2

Stack Overflow用户

发布于 2017-04-06 01:47:44

PlayClipAtPointAudioSource类的static函数。不能在实例上调用静态函数。您应该在类型上调用它:

代码语言:javascript
复制
AudioSource.PlayClipAtPoint(clip1, point1.transform.position, 0.9f);

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

因此,只需将所有字段声明替换为:

代码语言:javascript
复制
public Transform[] points;
public AudioClip[] clips;

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

票数 3
EN

Stack Overflow用户

发布于 2017-04-06 16:02:12

您的完整代码将如下所示:

代码语言:javascript
复制
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);
     }
}

别忘了在检查器中分配相应数组中的变换和剪辑;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43237550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档