2015-01-02 3 views
0

나는 호랑이 게임을하고 있고 방아쇠를 당길 때 소리가 울길 원합니다. 문제는 방아쇠를 켤 때마다 방아쇠를 당기는 것이 계속되지 않는다는 것입니다. 나가 원하는 무엇이 방아쇠에 들어가고, 소리를하고, 그 후에 결코 다시 놀아 않아야한다이다. 나는 클립을 파괴하는 것 같은 많은 것들을 시도했다. 그러나 나는 그것을 제대로 작동시키는 것처럼 보이지 않는다.정지 오디오 클립 재생

public class SoundScript : MonoBehaviour 
{  
    public AudioClip Snd_Sound; 

    IEnumerator Wait(){ 
     yield return new WaitForSeconds(20000); 
     } 

    void OnTriggerEnter(Collider col) 
    {    
      audio.enabled = true; 
      audio.PlayOneShot(Snd_Sound, 1f); 
      StartCoroutine(Wait()); 
      //??? 
    } 
} 

또한 내 대기 시간이 작동하지 않는 것으로 보입니다.

+0

익숙하지 : 오디오가 재생 완료되면, 당신은 당신은 또한 다음과 같은이 오디오의 재생을 처리하는 변수를 선언 할 수 Destroy(gameObject) 또는 Destroy(this)

같은 기능) (파괴 사용할 수 있습니다 단일성 coroutines, 그러나 나는 다른 실에 일을 둔다 것을 나는 믿는다. 어떤 경우에는 다른 스레드에 대기 시간을 두지 않으려 고하면 대기 중이며 아무것도 블로킹하지 않습니다. "soundPlayed"플래그를 설정하지 않는 이유는 무엇입니까? – BradleyDotNET

답변

1

죄송합니다, 내 영어 나쁜 :/ 당신은 플레이어가 두 번째

에 대한 트리거를 입력하는 경우에도, 오디오 소스가 처음 입력 한 후 다시 재생하지 할 필요가 있음을 이해

가장 간단한 방법은이 트리거 게임 개체 또는 입력 한 후 오디오 재생을 처리하는이 스크립트를 파괴하는 것입니다. 와

bool playsound; //assign the value of **true** in Inspector 
void OnTriggerEnter(Collider col) 
{ 
    if(playsound){ 
     audio.enabled = true; 
     audio.PlayOneShot(Snd_Sound, 1f); 
     playsound = false; 
    }  
} 
0

사운드 바이트를 보유하고 사운드 재생을위한 공개 메소드를 노출하는 하위 오브젝트를 작성합니다. 그런 다음 SoundScript 객체 내에서 자식 객체 스크립트를 저장하는 변수를 만듭니다. OnTriggerEnter가 트리거되면 변수가 null이 아닌지 확인하십시오. 그렇지 않다면 자식 객체의 public 메소드를 호출하고 변수를 null로 설정하십시오. 사운드 베이트가 끝난 후에도 스크립트가 스스로를 파괴하게하십시오. 자식 게임 개체가 장면에서 제거되면 다시 재생할 수 없습니다. 내가 질문을 잘못 이해하는 경우

관련 문제