2017-04-05 95 views
0

我在攝像機周圍有8個空的遊戲對象,我希望來自世界各地的相同聲音。 如何正確PlayClipAtPoint來完成此操作。 此腳本位於我的音頻管理器空遊戲對象上。但我希望音頻來自Point1-Point8轉換位置。Unity在任意一個gameobjects位置播放音頻剪輯

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); 
} 

} 
+0

那麼myFunc應該選擇一個隨機對象*和*一個隨機剪輯? – Keiwan

+0

它會在某些時候,我只是想音頻播放現在,它不。 – CsharpBeginner

回答

3

PlayClipAtPointAudioSource類的static功能。你不能在實例上調用靜態函數。你應該把它的類型:

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

一點題外話:我也建議您爲TransformsAudioClips聲明數組,並在檢查填充它們,而不必爲每一個公共領域。這將使得隨機選擇位置並且聽起來更容易(否則你必須手動將所有這些對象放入數組中,這顯然是更多的工作並且不太靈活)。

所以只是更換所有的字段聲明:

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

然後,只需使用索引來訪問它們。

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); 
    } 
} 

不要忘記分配變換和剪輯,從相應檢查陣列;

+0

謝謝,我覆蓋了。 – CsharpBeginner