我在相机周围有8个空的游戏对象,我希望从世界上的那些点获得相同的声音。 如何正确地PlayClipAtPoint来实现这一目标。 此脚本位于我的Audio Manager Empty游戏对象上。但我希望音频来自Point1-Point8转换位置。
type [i32] cannot be dereferenced
答案 0 :(得分:3)
PlayClipAtPoint
是static
类的AudioSource
函数。您无法在实例上调用静态函数。你应该在类型上调用它:
AudioSource.PlayClipAtPoint(clip1, point1.transform.position, 0.9f);
作为旁注:我还建议您为Transforms
和AudioClips
声明数组,并在检查器中填充它们,而不是每个都有一个公共字段。这将使得随机位置和声音的拾取变得更加容易(否则你必须手动将所有这些对象放入数组中,这显然需要更多的工作和灵活性)。
所以只需用以下内容替换所有字段声明:
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);
}
}
不要忘记从检查员分配相应数组中的变换和剪辑;