2015-05-17 342 views
3

我有4個聲音文件,這是我希望播放器在與地面碰撞時產生的降落噪聲,此時沒有聲音在播放。對於C#和編程新手需要一點幫助。在碰撞時播放隨機聲音片段(Unity)

using UnityEngine; 
using System.Collections; 

[RequireComponent(typeof(AudioSource))] 
public class Bhop : MonoBehaviour{ 

public AudioClip[] list; 
AudioSource audio; 
CharacterController characterController; 
int number; 

void Start() 
{ 
    audio = GetComponent<AudioSource>(); 
    characterController = GetComponent<CharacterController>(); 
    //Loading the items into the array 
    list = new AudioClip[] 
    { 
     (AudioClip)Resources.Load("Sound/jumplanding1.wav"), 
     (AudioClip)Resources.Load("Sound/jumplanding2.wav"), 
     (AudioClip)Resources.Load("Sound/jumplanding3.wav"), 
     (AudioClip)Resources.Load("Sound/jumplanding4.wav") 
    }; 
} 

void OnCollisionEnter (Collision col) 
{ 
    int number; 
    number = Random.Range(0, list.Length); 


    if (col.gameObject.name == "Sound") 
    { 
     audio.PlayOneShot(list[number], 0.5f); 
    } 
} 
} 
+0

如果在碰撞時應該發出聲音調試,是'col.gameObject.name ==「Sound」'等於true? – JRLambert

+0

如果「Resources/Sound」文件夾中的聲音資源可能會重複檢查。爲了確定,你可以將每個剪輯拖放到檢查器的列表中,而不是在'Start()'上加載它們。 – Geri

+0

你確定知道碰撞處理程序被調用嗎?嘗試在那裏輸出。如果這樣做,然後嘗試將「PlayOnShot」放在Start方法的末尾,並查看聲音是否起作用以消除其他變量。讓我們知道結果是什麼。 – Reasurria

回答

-2
Audio.PlayOneShot(AudioClip[UnityEngine.Random.Range(0,AudioClip.Length)], 0.8f); 
+0

你能否提供一些解釋? – Theresa

0

如果你已經附加腳本遊戲對象添加的[RequireComponent(typeof(AudioSource))]前行,你很可能不爲你的遊戲對象的Audio Source組件(檢查督察)。如果是這樣的話,您可以:

  • 在檢查手動添加音源組件,或
  • 刪除,然後將劇本重新連接到遊戲物體,它會自動添加音頻來源組件與它。如果您正在爲音頻文件使用公共AudioClip變量(OP不是),請記住再次將聲音資產拖放到腳本的公共變量中(通過腳本重新附件清除它)。
0

這裏伴侶

說明: 1 - 附加至任何遊戲物體 2 - 地方用的AudioSource組件MYSOURCE 3遊戲對象 - 比方說,你有3個音頻片段要使用,設置這兩個範圍掃描和我的音樂元素,以3 4 - 增加你的3個素材爲元素 5 - 啓用調試以獲得在控制檯上的剪輯的列表,但它們也顯示在編輯器,你玩遊戲

提示:這是啓用,所以每次這個對象是enabl Ë它會運行一個新的範圍和分配的片段,希望它可以幫助我花了大約5分鐘,如果這能幫助您,請考慮以下我的Facebook開發組HERE

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class randomSound : MonoBehaviour { 


    public AudioSource mySource; 
    public int rangeScan; 
    public AudioClip[] myAudio; 
    public int toPlay; 
    public bool debugging; 

    void OnEnable() { 
     toPlay = Random.Range(0,rangeScan); 
     if (debugging) { 
      foreach (AudioClip value in myAudio) { 
       print (value); 
      } 
     } 
     mySource.PlayOneShot(myAudio[toPlay], 0.9F); 
     mySource.Play(); 
    } 
}