2017-04-05 4 views
0

私はカメラの周りに8つの空のゲームオブジェクトがあり、私は世界のそれらの点から来る同じ音をしたい。 これを行うには、どうすればPlayClipAtPointを正しくプレイできますか? このスクリプトはAudio Managerの空のゲームオブジェクトにあります。しかし、私は、オーディオを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

関連する問題