2013-11-04 1 views
2

게임에 폭풍이 몰아 치고 천천히 폭우가 내리고 비가 서서히 들어가는 주변 오디오 파일을 만든 다음 반복적 인 폭풍 오디오 파일이됩니다. . 여기에 내가했던 방법입니다특정 지점에서 게임 오디오 루프를 수행하는 방법

// Play intro clip and merge into main loop 
var introTime = stormIntro.length; 
AudioSource.PlayClipAtPoint(stormIntro, Vector3.zero, 0.7); 
Invoke("StormMusic", introTime); 

나는 현재는 길이 후 시작 storm_loop를 호출 다음의 storm_intro 오디오 클립의 길이를 얻을 클립을 재생하고있다 할 노력하고있어 방법 소개가 완료되었습니다. 이 일종의은 작동하지만 실제로는 두 개의 사이에 간격이 있기 때문에 실제로는 작동하지 않습니다. 그렇다면 전환을 원활하게하기 위해 어떻게해야합니까?

답변

2

저는 지금 Unity를위한 음악 미들웨어에서 일하고 있습니다. 나는이 문제를 많이 경험합니다. 이러한 "간격"은 Unity가 재생하기 전에 디스크에서 오디오 데이터를로드해야하므로 실제로 재생할 수 없기 때문에 나타납니다. 특정 시점에서 일부 청취 클립을 재생하도록 예약하려면 사전에 알 필요가 있습니다. AudioSource.PlayScheduled를 사용해야합니다. @Kay는 조언했습니다.

PlayScheduled는 표준 Time.time이 아닌 AudioSettings.dspTime에서 작동한다는 점에 유의해야합니다. 그것은 결코 멈추지 않으며 에디터에서 게임의 다른 시작 사이에서도 똑같이 유지 될 수 있습니다. 따라서 audio.PlayScheduled(AudioSettings.dspTime + expectedDelay);과 같은 것을 작성하여 expectedDelay 초 내에 특정 오디오 클립을 재생해야합니다. Unity가 클립을로드 할 수 있도록 expectedDelay을 적절한 수준으로 유지해야합니다. 양은 오디오 파일 크기, 가져 오기 설정, 최적화하려는 장치 및 기타 사항에 따라 다릅니다. 몇 번의 실험을 거친 후에 올바른 가치를 찾을 수 있다고 생각합니다.

하지만 수동으로 클립을 반복하고 같은 지점에서 반복해서 실행하면 다시 간격이 생깁니다. 그들은 훨씬 더 짧을 것이고, 당신은 그것들을 알아 차릴 수 없을지도 모르지만 그들은 거기에있을 것입니다. 당신은 오디오 출력을 녹음하고 그것을 일부 오디오 편집기에서 볼 수 있습니다. 이 문제를 해결하기 위해 동일한 클립으로 오디오 소스를 사용하고 하나씩 차례로 실행합니다.

+0

아, 완벽하게 작동합니다. 도와 줘서 고마워! :) – Essential

2

로드가 StormMusic 클립이 약간의 시간이 걸리기 때문에 차이가 있다고 생각합니다. 예를 들어 콜라이더가 인트로를 수동으로 트리거 할 수 있다면 AudioSource.PlayScheduled은 원하는 것을해야합니다.

는 불행하게도 애니메이션에서와 같은 오디오 소스에 대한 방법을 사용할 수 또는 크로스 페이드를 PlayQueued없는있다.

+0

감사 회신, 그 사실은 좋은 생각이다. 불행히도 이전에는 PlayScheduled를 사용하지 않았지만 제대로 작동하지 않는 것 같습니다. 언제든지'audio.PlayScheduled (15);에 넣어두면 바로 audioSource를 재생하기 시작합니다. 깨어있는 상태에서 플레이 할 수는 없습니다. 나는 그것보다 먼저 수확량 WaitForSeconds를 넣을 수는 있지만 오디오 위로 소리를내는 지점을 제거합니다. _ < – Essential

+1

PlayScheduled는 표준 시간이 아니라 AudioSettings.dspTime을 입력으로 사용합니다. 이 시간은 절대로 멈추지 않으며 편집기에서 게임을 시작하거나 중단하는 사이까지 계속 될 수 있습니다. audio.PlayScheduled (AudioSettings.dspTime + 15); 대신. –

0

인트로 섹션이라는 BGM을 재생할 수있는 Unity 플러그인 인 Introloop이라는 솔루션을 만들었습니다.이 플러그인은 파일을 두 클립으로 자르지 않고 끝없이 반복됩니다.

정확한 루핑을 보장하기 위해 일정과 같은 AudioSettings.dspTime 관련 메서드를 사용했습니다. 또한 2 개의 인트로 포함 오디오 사이의 크로스 페이딩을 지원합니다. 오디오 당 2 포인트 만 제공하면 스크립트는 나머지 오디오 저글링을 처리합니다.

http://forum.unity3d.com/threads/378370/

관련 문제